如何讓類不能被繼承

2021-10-21 17:26:14 字數 993 閱讀 2652

方法一:借助 final 關鍵字,用該關鍵字修飾的類不能被繼承。

#include

using

namespace std;

class

base final

;class

derive

:public base

;int

main()

解決方法二:借助友元、虛繼承和私有建構函式來實現

#include

using

namespace std;

template

<

typename t>

class

base

~base()

};classb:

virtual

public base};

classc:

public b

// error: 'base::base() [with t = b]' is private within this context};

intmain()

說明:在上述**中 b 類是不能被繼承的類。

具體原因:

雖然 base 類建構函式和析構函式被宣告為私有 private,在 b 類中,由於 b 是 base 的友元,因此可以訪問 base 類建構函式,從而正常建立 b 類的物件;

b 類繼承 base 類採用虛繼承的方式,建立 c 類的物件時,c 類的建構函式要負責 base 類的構造,但是 base 類的建構函式私有化了,c 類沒有許可權訪問。因此,無法建立 c 類的物件, b 類是不能被繼承的類。

注意:在繼承體系中,友元關係不能被繼承,雖然 c 類繼承了 b 類,b 類是 base 類的友元,但是 c 類和 base 類沒有友元關係。

c c 中如何讓指定類不能被繼承?

有時候我們並不希望自己寫的類被繼承,怎麼做呢?方法很簡單,只需要在定義類時加上sealed關鍵字,用 sealed 關鍵字宣告的類也叫密封類,如下 public sealed class room 強制派生會有什麼錯誤呢?如下截圖 room 被定義為密封類,因此現在已經無法從 room 類派生。如果...

不能被繼承的類

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

不能被繼承的類

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