一、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
同樣,你可以通過