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

來源:互聯網
上載者:User

   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++的類在發生繼承時,它們的建構函式和解構函式的調用次序是怎樣的呢?

    建構函式:爺爺建構函式 → 父親建構函式  → 兒子建構函式

    解構函式:兒子解構函式 → 父親解構函式  → 爺爺解構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.