c++11已有final關鍵字阻止繼承,所以以下技術廢棄
此時如果有繼承的類,將無法呼叫父類的建構函式,即無法被繼承。但構造或者析構此類都需要靜態成員函式來執行,不是很方便。
template
<
typename t>
class
makesealed
~makesealed()
};class
sealedclass
:virtual
public makesealed};
class
trytoextend
:sealedclass};
intmain()
tips:
sealedclass可以被正常構造,因為其是父類的友元類,可以訪問父類的建構函式,但sealedclass的基類不是sealedclass的父類的友元函式,不能初始化sealedclass類。
virtual虛繼承必不可少。若沒有虛繼承(原理我不是很清楚,但道理是這樣),子類的構造是由裡向外一層一層構建,類似於這一層構建上一層,一層負責一層,sealedclass類負責其父類構造,所以能夠完成構建。如果有虛繼承,sealedclass的子類直接負責sealedclass的父類構建,但是許可權不夠,不能完成構建。
C 怎麼可以讓乙個類不能被繼承
class cnoinherit 只要是基類,最好是虛析構函式 virtual cnoinherit 注意必須是 virtual private 就是想讓這個ctest類不能被繼承 class ctest virtual private cnoinherit class cmytest public...
如何防止乙個類被繼承?
c view第一期 此處一定要宣告,否則在nonderivablehelper類中將nonderivable定義為友元類時,會認為是private中的某個類 class nonderivable namespace private friend class nonderivable ifdef nd...
如何定義乙個不能被繼承的類
方法一 將建構函式宣告為私有的 如果把乙個類的建構函式宣告為私有的,那麼這個類就不能被繼承。但是這也引入了乙個問題,不能在類外定義這個類的物件,所以我們還需要在類內定義乙個靜態的成員函式來返回建立的這個物件。class aa protected aa 方法二 我們可以宣告乙個輔助的類a,把類a這個類...