一、final关键字
C++新标准规定:如果我们定义的类不希望被其他类继承,那么可以在类名后加一个final关键字
但是final类仍然可以继承其他类。
实际上C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重载。
二、演示案例
class A final{};
class B:public A{}; //报错,A是final的
class A {};
class B final :public A{}; //正确
class C:public B {}; //错误
某些实现系统服务、基础功能和加密等的类通常是不允许有子类的;实现者不想客户端从这些类派生新类而修改他们。标准库容器,如std:: vector和std:: list的无子类化类型就是另一个很好的例子。这些容器没有虚拟析构函数或者确切地说没有任何虚成员函数。
然而,程序员常常在没有意识到风险的情况下坚持从std::vector派生。在C++11中,无子类类型将被声明为如下所示:
class TaskManager {/*..*/} final;class PrioritizedTaskManager: public TaskManager {}; //compilation error: base class TaskManager is final
同样,你可以通过