天天看點

C++11新特性(57)- final說明符

個人以為,C++之是以适合架構設計,很大一個原因就是它可以對将來程式設計。比如可以通過public/protected/private來限定派生類對基類成員的通路,可以定義抽象類要求派生類必須實作的接口等。

當我們聲明/定義了一個虛函數時候,派生類可以選擇覆寫這個虛函數,也可以選擇不覆寫。關于這一點,C++也提供了必要的方法,來要求派生類覆寫某些方法,這也可以看作是一種對将來程式設計。

純虛函數

這并不是一個新技術,功能也非常簡單:就是一旦某個基類聲明了某個純虛函數,它的派生類在執行個體化的時候就必須覆寫這個函數。

C++11新特性(57)- final說明符

本例中注釋掉了sub::f1()方法,是以在第27行就會發生編譯錯誤。

final說明符

一般說來,有要求的覆寫的方法,就應該有禁止覆寫的手段。但是不知道為什麼,這個功能到了C++11中才被引入。使用方法也很簡單:隻要在函數聲明的後面添加final說明符即可。

C++11新特性(57)- final說明符

代碼基本沒變,隻是base::f1()聲明的後面換成了final說明符。這時如果定義了sub::f1()方法,就會産生如上圖的編譯錯誤。

作者觀點

本文根據作者個人的了解,将純虛函數和final說明符放到一起說明。如有不準确之處,歡迎補充和糾正。