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






  • 相关阅读:
    1-hadoop中遇到的各种异常
    13-hadoop-入门程序
    12-mapReduce的简介和yarn搭建
    11-hdfs-NameNode-HA-wtihQJM解决单点故障问题
    10-hdfs-hdfs搭建
    redis-java-api
    深度学习优化方法
    tf.nn.embedding_lookup()
    tf.variable_scope()和tf.name_scope()
    tf.Variable()、tf.get_variable()和tf.placeholder()
  • 原文地址:https://www.cnblogs.com/llguanli/p/8470415.html
Copyright © 2011-2022 走看看