C++中如何實現一個不能被繼承的類?
在C#中可以使用sealed,Java中可以使用final來表示一個類不能被繼承,而在c++中並沒有這個,那我們怎麼在c++中實現一個不能被繼承的類呢?
1、把構造函數設為私有
這是最簡單的一種辦法了,那就是把構造函數設為私有,因為我們都知道當一個類試圖從它那裡繼承的時候,必定會因為調用基類的構造函數,而基類的構造函數是私有的,這樣會導致編譯錯誤;
可是這樣我們又怎麼獲得這個類的實例呢?我們可以定義公有的靜態函數來獲取和釋放,有點類似單例模式~
class sealClass { public: static sealClass * GetInstance() { return new sealClass(); } static void DeleteInstance(sealClass* p) { delete p; } private: sealClass(){}; ~sealClass(); }
2、利用友元類與虛擬繼承
templateclass sealClass { friend T; private: sealClass(){}; ~sealClass(); } class sealClass1:virtual public sealClass { public: sealClass1(){}; ~sealClass1(); }