zoukankan      html  css  js  c++  java
  • 浅析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:
    	
    };
    






  • 相关阅读:
    在CentOS 6.4中编译安装gcc 4.8.1
    uc_client是如何与UCenter进行通信的
    使用Discuz关键词服务器实现PHP中文分词
    新浪博客
    simple_html_dom使用小结
    提高网站权重,快速增加百度收录量
    TokuDB的特点验证
    Linux shell判断文件和文件夹是否存在
    比较满意设计的一次作业 JDBC宠物管理
    乱码问题
  • 原文地址:https://www.cnblogs.com/llguanli/p/8470415.html
Copyright © 2011-2022 走看看