说明
- 从C++11开始支持override和final关键词。
final
adj.最终的;最后的;(指结果)最终的;决定性的;不可改变的
- 在C++作用类似,可以修饰类,结构体和函数,修饰类和结构体表示禁止继承该类,对于函数表示禁止重写该函数。
final 类
class A final {
//......
};
class B : public A { //错误!不能继承final类!
};
final 函数
class A {
public:
virtual void SomeMethod() final;
};
class B : public A {
public:
virtual void SomeMethod(); //错误!不能重写该方法!
};
好处
- 使用final关键词可以明确告诉编译器可以作一些优化,例如:使用了final的virtual函数,编译时可以识别出来,这个函数不能被覆盖,因此会将该类的虚表中删除; 标记为final的类,编译器则根本不会生成虚表,以减少程序资源占用。
override
覆盖
- 在C++中作用类似,用来修饰函数,用途是:在子类中重写父类中的函数时,显式使用该关键词编译器会帮助检查函数重写是否正确,错误时会编译失败,不使用也不会编译失败,但是建议显示使用。
- 使用示例:
class A {
virtual void test(int) {}
};
class B : A {
virtual void test(int) override {} // OK
virtual void test(double) override {} //编译报错
};