12为意在改写的函数添加override声明:
C++面向对象编程是围绕类、继承和虚函数的基础上演化出来的。
正是由于虚函数,使得通过基类接口调用派生类成为了可能,然而,虚函数需要满足以下条件:
- 基类中的函数必须是虚函数
- 基类和派生类中的函数名字必须完全相同(虚析构函数除外)
- 基类和派生类函数形参必须完全相同
- 基类和派生类函数常量性必须完全相同
- 基类和派生类中的函数返回值和异常规格必须完全相同
- 函数引用修饰词必须完全相同
class base
{
public:
virtual void f1();
virtual void f2(int a);
virtual void f3() &;
void f4();
};
class derive : public base
{
public:
virtual void f1() const;
virtual void f2(unsigned int a);
virtual void f3() &&
void f4();
};
以上例子中,四组函数均不满足虚函数的定义条件,但一些ide也许不会在编辑代码的步骤中对这些错误发出警告
由于虚函数的定义需要保证正确性,同时也比较容易写错,因此,C++11提供了override声明
class derive : public base
{
public:
virtual void f1() const override;
virtual void f2(unsigned int a) override;
virtual void f3() && override;
void f4() override;
};
此时,编译器会检查所有与改写相关的问题,提醒开发者此虚函数声明有误,避免不小心写错
同时,override关键字仅仅在函数声明末尾才有用
Comments NOTHING