如何定義乙個不能被繼承的類???
假設有乙個類b,如果把b的建構函式宣告為私有的,那麼b這個類就不能被繼承,但是這也引入了乙個問題,不能在類外定義b型別的物件,那要怎麼解決這個問題呢???
方法1:
我們可以在類內建立乙個物件並提供乙個靜態的介面,返回建立的這個物件。但是如果使用這種方法的話,在定義b的物件的時候感覺不是很完美。
這種寫法有點類似於單例:
#include
class
cparent
~cparent()
int m_v;
static cparent * m_instance;
public
:void
fun(
)static cparent *
getinstance
(int v);}
;cparent *cparent::
getinstance
(int v)
intmain()
方法2:我們可以宣告乙個輔助的類a,把類a的建構函式宣告為私有的,並使得b是a的友元類,且b虛繼承a。讓b是a的友元類的目的在於能夠讓b訪問a的私有建構函式,這樣繼承自a的b才可以被例項化。
假設現在有乙個類d繼承b,在d初始化的時候會先呼叫b類的建構函式,但是由於b虛繼承a,所以為了防止產生二義性,d必須先呼叫a的建構函式,由於a的建構函式是私有的不可訪問,所以會產生錯誤,繼承會失敗。
classb;
//設計乙個不能被繼承的類
方法3:c++11標準提供關鍵字final。將類宣告為final即可。
如何定義乙個不能被繼承的類
方法一 將建構函式宣告為私有的 如果把乙個類的建構函式宣告為私有的,那麼這個類就不能被繼承。但是這也引入了乙個問題,不能在類外定義這個類的物件,所以我們還需要在類內定義乙個靜態的成員函式來返回建立的這個物件。class aa protected aa 方法二 我們可以宣告乙個輔助的類a,把類a這個類...
如何定義乙個不能被繼承的類
用c 設計乙個不能被繼承的類 不能被繼承?不能被繼承?不能被繼承?按照繼承的理論知識分析,我們只要把類的建構函式設定為私有的,即可解決問題。因為那樣的話,子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。但是,假設那樣,這個類我們在其它地方怎麼使用呢...
C 實現乙個不能被繼承的類
要設計乙個不能被繼承的類,考慮c 11的新特性的話,有三種方法 1 就是將該類的建構函式和析構函式設為private 或者僅僅將析構函式設為private 這樣派生類無法呼叫基類的建構函式和析構函式,從而不能繼承。要建立物件,可以在該類中設乙個static成員函式,提供返回乙個該類物件指標,這種方法...