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:
    	
    };
    






  • 相关阅读:
    swift 学习资源 大集合
    ACM:回溯,八皇后问题,素数环
    hibernate 批量处理数据
    CTR校准
    Android Handler Message总结一下
    使用腾讯电子邮件,邮箱的一部分是无法接收正常邮件的问题
    JS获得URL参数
    JSP 获取访问者真正的IP地址
    根据百度API获得经纬度,然后根据经纬度在获得城市信息
    oracle initialization or shutdown in progress解决方法
  • 原文地址:https://www.cnblogs.com/llguanli/p/8470415.html
Copyright © 2011-2022 走看看