深入理解C++11 2.10 final/override控制

先说下什么是重载,一个A类中声明的虚函数fun在其子类B中再次被定义,且B中的函数fun跟A中的fun原型一样(函数名、参数列表等一样),那我们就称B重载(override)了A的fun函数。对于任何B类型的变量,调用成员函数fun都是调用了B重载的版本。而如果同时有A的子类C,没有重载fun函数,那么调用C类型的fun都是调用A的fun。
C++中重载还有个特点就是,基类声明为virtual的函数,之后的重载版本都不需要再声明virtual,如上A的fun是virtual的,那A
的子类B的fun也是virtual,假设BB是B的子类,一样可以重载fun,如果B不希望自己的子类重载fun,则可在函数上加上final关键字。如:

class A {
    virtual void fun(){
        cout << "A" << endl;
    }
};

class B:A {
    void fun() final {
        cout << "B" << endl;
    }
};

class BB:B {
    void fun() {            //编译不过
        cout << "B" << endl;
    }
};

override关键字则是用来表明该方法是不是某个虚函数的重载,如果子类在函数声明时使用了override描述符,则其基类必须存在同原型的方法,否则编译不过,如:

class A {
    virtual void fun(){
        cout << "A" << endl;
    }
};

class B:A {
    void fun() override {
        cout << "B" << endl;
    }
    
    void fun2() override {      //编译不通过,因为基类无此原型的虚函数
        cout << "B2" << endl;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容