精通Cocos2d-x游戏开发(基础卷)
上QQ阅读APP看书,第一时间看更新

5.8 显式虚函数重载

override可以确保在重写父类的虚函数,调整父类虚函数时(改名字或参数),不会忘记调整子类的虚函数。在编译时,编译器会为标记为override的虚函数检查其父类是否有该虚函数。代码如下:

class A
{
public:
    virtual void virtualFun(int);
}
class B : public A
{
public:
    virtual void virtualFun(int) override;              //显式重写了该函数
    virtual void virtualFun(float) override;            //父类并无该虚函数,错误
}

final可以确保子类不能重写函数,或有相同签名的函数,或类不能被继承。代码如下:

class A final { }
 //继承失败,因为A已经被声明为final
class B : A { }
class A
{
    virtual void fun() final;
}
class B : public A
{
   //失败,因为父类已经声明fun为final
    void fun();
}

override和final并不是关键字,只有在上面特定的位置才有特殊含义,在其他地方仍可当变量来使用。为了保持向后兼容,override是选择性的。