C++ final关键字
1.禁用继承
C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误。
实例如下:
class Super final { //...... };
2.禁用重写
C++中还允许将方法标记为fianal,这意味着无法再子类中重写该方法。这时final关键字至于方法参数列表后面,如下
class Super { public: Supe(); virtual void SomeMethod() final; };
3.final函数和类
C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重载。我们先来看看final类吧。
程序员常常在没有意识到风险的情况下坚持从std::vector派生。在C++11中,无子类类型将被声明为如下所示:
class TaskManager {/*..*/} final; class PrioritizedTaskManager: public TaskManager { }; //compilation error: base class TaskManager is final
同样,你可以通过声明它为final来禁止一个虚函数被进一步重载。如果一个派生类试图重载一个final函数,编译器就会报错:
class A { pulic: virtual void func() const; }; class B: A { pulic: void func() const override final; //OK }; class C: B { pulic: void func()const; //error, B::func is final };
C::func()是否声明为override没关系,一旦一个虚函数被声明为final,派生类不能再重载它。
参考资料
https://blog.csdn.net/u012333003/article/details/28696521
https://www.cnblogs.com/minggong/p/6457726.html