設計乙個不能被繼承的類

2021-07-02 17:36:44 字數 1348 閱讀 2523

分類: cpp

2012-02-19 20:33

1390人閱讀收藏 

舉報destructor

constructor

function

class

編譯器c

在c++中每個類都乙個建構函式和乙個析構函式,即使使用者不明確定義,系統也會類定義乙個預設的建構函式和析構函式。當建立該類的物件可以顯示或者隱式呼叫建構函式,當物件銷毀時會自動呼叫析構函式。

當有子類繼承父類,建立子類的物件時,會自動呼叫父類的建構函式,同樣當物件銷毀時也會自動呼叫父類的析構函式。

在類屬性中private不允許使用者和子類呼叫該函式的方法。

因此要想使用得類不能被繼承,可以將建構函式和析構函式宣告成private,這樣在編譯階段編譯器會給出繼承失敗

class

parent;  

~parent(){};  

};  

class

child : 

public

parent  

;  int

main()    

~lab623c@lab623c-desktop:~/realxie/cpp$ g++ parent.cpp -o parent

parent.cpp: in constructor 'child::child()':

parent.cpp:3: error: 'parent::parent()' is private

parent.cpp:8: error: within this context

parent.cpp:4: error: 'parent::~parent()' is private

parent.cpp:8: error: within this context

parent.cpp: in function 'int main()':

parent.cpp:13: note: synthesized method 'child::child()' first required here 

parent.cpp: in destructor 'child::~child()':

parent.cpp:4: error: 'parent::~parent()' is private

parent.cpp:8: error: within this context

parent.cpp: in function 'int main()':

parent.cpp:13: note: synthesized method 'child::~child()' first required here

不過這個問題的實用性不強,在實際並沒有什麼用途,只為考查繼承

用C 設計乙個不能被繼承的類

如果將乙個類設計成不能被繼承來的類,只要把類的建構函式設定為私有的,即可解決問題。因為那樣的話,子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。因為構造方法為私有,所以外部也不能呼叫建構函式生成例項,我們需要提供特殊的方法建立例項。具體做法是定義靜...

用C 設計乙個不能被繼承的類

一,把建構函式設為私有函式 在c 中子類的建構函式會自動呼叫父類的建構函式,子類的析構函式會自動呼叫父類的析構函式。要想定義乙個不能被繼承的類,我們只要把它的建構函式和析構函式都定義為私有函式。那麼當乙個類試圖從他那繼承的時候,必然會由於呼叫建構函式 析構函式而導致編譯錯誤。這個類的建構函式是私有的...

用C 設計乙個不能被繼承的類

在 c 中,子類的建構函式會自己主動呼叫父類的建構函式。相同,子類的析構函式也會自己主動呼叫父類的析構函式。要想乙個類不能被繼承,我們僅僅要把它的建構函式和析構函式都定義為私有函式。那麼當乙個類試圖從它那繼承的時候,必定會因為試圖呼叫建構函式 析構函式而導致編譯錯誤。template class a...