程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺析C++多重繼承

淺析C++多重繼承

編輯:C++入門知識

淺析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繼承的方式攻克鑽石型繼承

vcq9wLSx3MPituC33UHA4MTayN21xLP2z9ahozwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">class CSofa { public: virtual void Clean(); }; class CBed { public: virtual void Clean(); }; class CSofaBed : public virtual CSofa, public virtual CBed { public: };





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