• 浅析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:
    	
    };
    






  • 相关阅读:
    HDU1166:敌兵布阵(树状数组)
    elasticsearch 7.4.0依赖
    IntelliJ IDEA手工安装插件方法
    Guava入门
    Maven添加Oracle驱动及依赖
    springboot整合netty(二)
    MyBatis-Plus
    「Chris Richardson 微服务系列」服务发现的可行方案以及实践案例
    spring initializr
    String.Format( )用法
  • 原文地址:https://www.cnblogs.com/llguanli/p/8470415.html
Copyright © 2020-2023  润新知