程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++之如何實現一個不能被繼承的類

C++之如何實現一個不能被繼承的類

編輯:C++入門知識

C++之如何實現一個不能被繼承的類


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();

}


這個類使用起來大家肯定感覺到不方便,並且不能在棧上面創建對象,於是我在劍指offer上又看到一種實現~


2、利用友元類與虛擬繼承

template class sealClass
{
	friend T;

private: 
	sealClass(){}; 
	~sealClass();

}
class sealClass1:virtual public sealClass
{
public:
	sealClass1(){}; 
	~sealClass1();

}

此時這裡sealClass1只能夠 在棧上或堆上創造實例,但是不能被繼承,以為如果被繼承了,子類構造的時候會因為父類是虛擬繼承而跳過父類先去構造sealClass,但是此時的子類並不是sealClass的友元,只有它的父類sealClass1才是,所以繼承失敗~


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved