淺析C++多重繼承

繼承是面向對象的三大特徵之一。但是對於繼承的實現和使用方式,各種不同的面嚮對象語言有各自的觀點。有些語言支持多重繼承,而有些語言則只支持單一繼承。
多重繼承的確引入了較大的複雜度。那麼,在不得已使用的時候,需要注意幾個方面的處理方式,才能使代碼更加高效易懂

  • 封裝同名函數

對於多個父類中出現同名的函數,最好的處理方法是爲這些父類新添一個輔助類,在輔助類中用不同的函數名字來封裝同名函數。這樣可以更加輕鬆的調用這些同名函數。

class CSofa
{
public:
	// 同名函數
	virtual void Clean();
};

class CBed
{
public:
	// 同名函數
	virtual void Clean();
};

// 輔助類
class AuxSofa : public CSofa
{
public:
	virtual void CleanSofa() = 0;
	// 轉接到新接口
	virtual void Clean() { CleanSofa(); }
};

// 輔助類
class AuxBed : public CBed
{
public:
	virtual void CleanBed() = 0;
	// 轉接到新接口
	virtual void Clean() { CleanBed(); }
};

class CSofaBed : public AuxSofa, public AuxBed
{
public:
	// 清晰明確的接口名字,避免了同名困擾
	virtual void CleanBed();
	virtual void CleanSofa();
};
  • 利用virtual繼承的方式攻克鑽石型繼承


此類繼承,D類往往會持有兩份A類的數據,造成空間的巨大浪費。可以利用virtual繼承的方式來避免多份A類內容的出現。

class CSofa
{
public:
	virtual void Clean();
};

class CBed
{
public:
	virtual void Clean();
};

class CSofaBed : public virtual CSofa, public virtual CBed
{
public:
	
};






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章