如何定義乙個不能被繼承的類

2021-08-03 10:15:21 字數 712 閱讀 9208

方法一:將建構函式宣告為私有的

如果把乙個類的建構函式宣告為私有的,那麼這個類就不能被繼承。但是這也引入了乙個問題,不能在類外定義這個類的物件,所以我們還需要在類內定義乙個靜態的成員函式來返回建立的這個物件。

class aa    

protected:

aa()

{}

};

方法二:我們可以宣告乙個輔助的類a,把類a這個類的建構函式宣告為私有的,並使得b是a的友元類,且b虛

繼承a。這樣的話別的類就

不能繼承b了

。假設現在有乙個類d繼承b,在d初始化的時候會先呼叫b類的建構函式,但是由於b虛繼承a,所以為了

防止產生二義性,d必

須先呼叫a的建構函式,由於a的建構函式是私有的不可訪問,所以會產生錯誤,繼承會失敗。

class b;  

//設計乙個不能被繼承的類

class a

};

class b :virtual public a

private:

int _b;

};

//注意,這裡是肯定不會繼承b的

class d:public b

private:

int _d;

};

如何定義乙個不能被繼承的類

用c 設計乙個不能被繼承的類 不能被繼承?不能被繼承?不能被繼承?按照繼承的理論知識分析,我們只要把類的建構函式設定為私有的,即可解決問題。因為那樣的話,子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。但是,假設那樣,這個類我們在其它地方怎麼使用呢...

C 定義乙個不能被繼承的類

如何定義乙個不能被繼承的類?假設有乙個類b,如果把b的建構函式宣告為私有的,那麼b這個類就不能被繼承,但是這也引入了乙個問題,不能在類外定義b型別的物件,那要怎麼解決這個問題呢?方法1 我們可以在類內建立乙個物件並提供乙個靜態的介面,返回建立的這個物件。但是如果使用這種方法的話,在定義b的物件的時候...

如何實現乙個不能被繼承的類

首先我們要知道,在c 中,子類的建構函式會呼叫基類的構造進行合成,要想乙個類不被繼承,只要把它的建構函式定義成私有,子類就沒有辦法訪問基類建構函式,從而就阻止了進行子類構造物件 可是問題又來了,你把乙個類的建構函式定義為私有的,那它自己也定義不出物件,這該如何解決。這時我們想到了靜態函式,靜態成員函...