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






  • 相关阅读:
    微信小程序-开发入门(一)
    Vue入门
    美化input type=range标签滑动样式(带渐变效果)
    全新的css网站布局--Grid布局
    移动端布局与样式上的坑
    swiper 下拉刷新混乱
    子元素scroll父元素容器不跟随滚动JS实现
    解决前端页面闪烁问题(转载)
    VUE 与其他常见前端框架对比
    移动端表层div滑动,导致底层body滑动(touchmove的阻止)
  • 原文地址:https://www.cnblogs.com/llguanli/p/8470415.html
Copyright © 2011-2022 走看看