[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++的類在發生繼承時,它們的構造函數和析構函數的調用次序是怎樣的呢?
? ? 構造函數:爺爺構造函數 → 父親構造函數 ?→ 兒子構造函數
? ? 析構函數:兒子析構函數 →?父親析構函數 ?→ 爺爺析構函數
轉載于:https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/30/2747108.html
總結
以上是生活随笔為你收集整理的[C++基础]037_编写不可被继承的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件行业大牛告诉你何谓成功?
- 下一篇: s3c2440移植MQTT