劍指offer 不能被繼承的類

2022-08-12 02:51:12 字數 519 閱讀 3579

方法一:通過將類的建構函式和析構函式宣告成private來防止子類繼承。宣告靜態的方法來構造和析構類的物件。

但是用起來不是很方便。只能得到在堆上的例項,而不能得到在棧上的例項。

方法二:構造輔助類cbase,宣告ctest為cbase友元類,並將自己的構造和析構宣告為private,然後ctest虛繼承cbase。

根據虛繼承的特性,虛基類的建構函式由最終的子類負責構造。

但是這種方法的可移植性不好,雖然在vs中能夠編譯,但是gcc中對friend的要求不同於vs。目前最新的gcc還不支援模板引數型別作為友元型別。

#include using

namespace

std;

class

cbase

~cbase()

};class ctest:virtual

public

cbase

~ctest()

};void

main()

不能被繼承的類

不能被繼承的類,就是子類在呼叫父類的建構函式的時候失敗就沒法被整合了,所以可以把析構函式定義為private,因為在呼叫建構函式的時候,會先檢查析構函式,如果析構是private的,那麼建構函式也沒法被呼叫。這個問題和另一篇文章類似我們通過設定共有的static函式來構造和析構。class a a ...

不能被繼承的類

題目 用c 設計乙個不能被繼承的類。分析 乙個類被繼承後,在生成派生類物件時,派生類會主動呼叫父類的建構函式,所以如果父類的建構函式被設定成私有時,派生類的物件就無法構建。一 直接將建構函式設為私有函式 class sealedclass static void deleteinstance sea...

不能被繼承的類

何如建立乙個不能被繼承的類呢?c 語法規定虛基類必須由子類顯示初始化。如果你不在初始化列表裡顯示呼叫虛基類的建構函式,則編譯器會呼叫預設建構函式 如果類沒有預設建構函式,則編譯不通過。利用這個特點,建立乙個private建構函式的類a,並讓類b成為他的友元類,讓類b虛繼承類a 此時類b就不能被繼承了...