分析普通類都能被繼承,但當這個類的建構函式被宣告為私有時,這個類便不能被繼承,同時也不能在類外面定義該型別的物件,該怎麼解決這個問題呢?
方法一:類物件的構造是通過建構函式實現的,如果將建構函式宣告為私有或者保護型別,那麼在類外是不能呼叫建構函式的,也就不能在類定義出物件。對此,我們可以在類裡定義乙個公有的介面返回成員函式生成的物件,之後在類外定義類時,只需呼叫這個函式即可 ,但這樣還有缺陷,因為在類外只能通過類的物件來呼叫這個成員函式,所以應將這個介面宣告為靜態的。
方法二:先定義乙個輔助類aa,將其建構函式定義為私有的,然後讓bb虛繼承aa(bb同時也要是aa的友元類,為了讓bb可以使用aa的構造來合成其建構函式)。此時cc類是無法繼承bb類的,因為cc類在初始化時會先呼叫bb的建構函式,但bb虛繼承aa,為了避免二義性,cc必須先呼叫aa的建構函式,而aa的建構函式是私有的,不可見,導致編譯器報錯。
實現
//方法一
class aa
public:
static aa* getaaobj()
static aa getaaobj()
protected:
int _aa;
};class bb : public aa
;
//方法二
C 實現乙個不能被繼承的類
要設計乙個不能被繼承的類,考慮c 11的新特性的話,有三種方法 1 就是將該類的建構函式和析構函式設為private 或者僅僅將析構函式設為private 這樣派生類無法呼叫基類的建構函式和析構函式,從而不能繼承。要建立物件,可以在該類中設乙個static成員函式,提供返回乙個該類物件指標,這種方法...
如何實現乙個不能被繼承的類
首先我們要知道,在c 中,子類的建構函式會呼叫基類的構造進行合成,要想乙個類不被繼承,只要把它的建構函式定義成私有,子類就沒有辦法訪問基類建構函式,從而就阻止了進行子類構造物件 可是問題又來了,你把乙個類的建構函式定義為私有的,那它自己也定義不出物件,這該如何解決。這時我們想到了靜態函式,靜態成員函...
C 實現乙個不能被繼承的類
題目 用c 設計乙個不能被繼承的類 1 不能被繼承?按照繼承的理論,只要把類的建構函式設為私有,即可解決問題。此時子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。問題 如何產生這個類的例項物件和釋放物件呢?2 顯然定義靜態方法,在方法內部實現乙個物...