[C++基礎]037_編寫不可被繼承的類


   1. 現実場景

    在很多電影電視劇里,武功最高的往往是太監,所謂“欲練此功,必先自宮”,太監的武功為什么會這么高?我想應該是閑的。如果說面向對象的世界里有父子的話,那么太監這個類應該就是無法生子的類。他們是無法被繼承的,不過,他們是可以繼承別人的。

   2. 技術問題

    要實現一個無法被繼承的類,Java為我們提供了一個關鍵字final,但是C++里沒有,那作為C++程序員如何寫出一個無法被繼承的類呢?構造函數和析構函數。

    為什么C++的構造函數和析構函數能夠實現這點呢?因為C++的類繼承里有一個規則,就是子類在實例化的時候,必須先調用父類的構造函數。對象銷毀的時候,也必須調用父類的析構函數。所以如果我們能阻止子類調用父類的構造函數和析構函數就可以了。

    那如何讓一個類的構造函數和析構函數不被子類調用呢?private權限。是的,private權限的成員和函數都只能給類自己內部用。這樣的話,就可以實現我們要的無法被繼承的類了。

    下面就看我們實現的代碼是什么樣的吧!

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Taijian{
 5 public:
 6      void publicFunc(){
 7 
 8      }
 9 
10 private:
11     Taijian(){}
12     ~Taijian(){}
13 };
14 
15 int main(){
16     return 0;
17 }

    對Taijian類,如果你試圖去繼承它,那是通不過編譯階段的。

   3. 補充

    關於C++的類在發生繼承時,它們的構造函數和析構函數的調用次序是怎樣的呢?

    構造函數:爺爺構造函數 → 父親構造函數  → 兒子構造函數

    析構函數:兒子析構函數 → 父親析構函數  → 爺爺析構函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM