c++程式設計開發中不能被繼承的類,解題思路:
1、c++中的子類建構函式會自動的呼叫父類的建構函式,子類析構函式會自動呼叫父類的析構函式。那麼把構造和析構函式定義為私有的,就不能被繼承了。
2、缺陷:定義為私有函式時,要在類外建立類的物件,只能實現成要麼在棧上建立要麼在堆上建立。
//因為建構函式和析構函式都為私有的,所以他不能被繼承
//缺陷:它只能在堆上生成,不能在棧上生成。
class a
private: //把建構函式宣告為私有的
a(int a)
~a()
int _a;
};優化:利用虛繼承。
//所以用虛繼承來實現,可以在堆上建立物件,也可以在棧上建立物件
template
class c
~c(){}
int _a;
};class d:virtual public c //d是c的友元型別,所以d可以訪問c的私有函式,來實現建立物件
~d(){}
}; //d不能被繼承
1.將c的構造和析構函式定義為私有函式,它不能被繼承,因為不會提供乙個建立物件的介面,所以它不能在類外使用。
2.把d定義成c的友元型別,d就可以呼叫c的所有函式,包括私有函式,使用d來建立c的物件時,它可以在堆上建立也可以在棧上建立。
3.同時d不能被繼承。假設e繼承了d,在呼叫e的建構函式時,會跳過d而直接呼叫c的建構函式,因為c的建構函式為私有的並且e不是c的友元型別,所以它不能呼叫c的建構函式。
C 中不能被繼承的類的實現
首先,了解下什麼是虛繼承 為了解決菱形繼承的多義性 include using namespace std class animal class mammal public virtual animal class wingedanimal public virtual animal class b...
不能被繼承的類
不能被繼承的類,就是子類在呼叫父類的建構函式的時候失敗就沒法被整合了,所以可以把析構函式定義為private,因為在呼叫建構函式的時候,會先檢查析構函式,如果析構是private的,那麼建構函式也沒法被呼叫。這個問題和另一篇文章類似我們通過設定共有的static函式來構造和析構。class a a ...
不能被繼承的類
題目 用c 設計乙個不能被繼承的類。分析 乙個類被繼承後,在生成派生類物件時,派生類會主動呼叫父類的建構函式,所以如果父類的建構函式被設定成私有時,派生類的物件就無法構建。一 直接將建構函式設為私有函式 class sealedclass static void deleteinstance sea...