Panda Wiki

C++ 中的 override 与 final 关键字

C++ 中 overridefinal 关键字都可以用以控制继承行为。

其中 override 用于保证派生类中的重载函数具有和父类中相同的函数签名,从而防止意外新建虚函数,而不是重载:

class A {
    virtual void func_1(int);
}

class B: A {
    virtual void func_1(int); // 对 A::func_1 的重载
    virtual void func_1(double); // 由于参数表不同,无意间新建了新的虚函数,而不是进行重载,编译器不报错
    virtual void func_1(double) override; // 这里使用 override 关键字,编译器将检查函数签名,发现参数表不一致,编译错误
}

final 关键字用于指明一个类或者函数不能再继续继承/重载

class A {} final;
class B: A {};  // A 不允许再继承
class A {
    virtual void func_1() const final;
}

class B: A {
    virtual void func_1() const override; // 编译错误,func_1 不允许重载
}
Copyright © 2020 熊猫小A Views