首页 > 代码库 > 浅析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继承的方式攻克钻石型继承
此类继承,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: };
浅析C++多重继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。