C++:38---final关键字和禁止类继承
生活随笔
收集整理的這篇文章主要介紹了
C++:38---final关键字和禁止类继承
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、final關(guān)鍵字
C++新標(biāo)準(zhǔn)規(guī)定:如果我們定義的類不希望被其他類繼承,那么可以在類名后加一個(gè)final關(guān)鍵字
但是final類仍然可以繼承其他類。
實(shí)際上C++11的關(guān)鍵字final有兩個(gè)用途。第一,它阻止了從類繼承;第二,阻止一個(gè)虛函數(shù)的重載。
二、演示案例
class A final{}; class B:public A{}; //報(bào)錯(cuò),A是final的 class A {}; class B final :public A{}; //正確 class C:public B {}; //錯(cuò)誤
某些實(shí)現(xiàn)系統(tǒng)服務(wù)、基礎(chǔ)功能和加密等的類通常是不允許有子類的;實(shí)現(xiàn)者不想客戶端從這些類派生新類而修改他們。標(biāo)準(zhǔn)庫(kù)容器,如std:: vector和std:: list的無(wú)子類化類型就是另一個(gè)很好的例子。這些容器沒有虛擬析構(gòu)函數(shù)或者確切地說(shuō)沒有任何虛成員函數(shù)。
然而,程序員常常在沒有意識(shí)到風(fēng)險(xiǎn)的情況下堅(jiān)持從std::vector派生。在C++11中,無(wú)子類類型將被聲明為如下所示:
class TaskManager {/*..*/} final;class PrioritizedTaskManager: public TaskManager {}; //compilation error: base class TaskManager is final同樣,你可以通過(guò)
總結(jié)
以上是生活随笔為你收集整理的C++:38---final关键字和禁止类继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理解Caffe的网络模型
- 下一篇: mysql导入source数据库sql的