可以例項化物件,但是不能被繼承的類

2022-04-08 18:32:49 字數 562 閱讀 9070

很容易想到的實現方式是將類的建構函式設為私有的。

class a

;};

則類a不能被繼承(繼承後不能例項化物件,那繼承後的類還有什麼意義?)。

上面的實現方式使得類a也不能例項化乙個物件,即a a;不能通過編譯。

那麼怎麼讓乙個類除了不能例項化物件外,其他操作都一樣呢?

先來看下面的例子,

class a;};

class b : public a

;};

類a的建構函式是私有的,類a不能例項化物件,但是對類b而言,它可以例項化物件。

類b可以例項化物件,即可以完成其他操作,那麼怎麼讓類b不能被繼承呢?

答案是讓類b虛繼承類a,如下,此時類c越過類b直接呼叫類a的建構函式,但類c不是類a的友元,因此不能呼叫類a的私有建構函式。所以類b就是可以完成例項化物件等操作但是不能被繼承的類!

class a;};

class b :virtual public a;};

class c : public b

;};

不能被繼承的類

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

不能被繼承的類

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

不能被繼承的類

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