浅析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:
};
浙公网安备 33010602011771号