zoukankan      html  css  js  c++  java
  • 多重继承的问题

      前面说了多重继承但是只是讲了他的提出和一些好处,其实还是有

    些问题的,多重继承增加了累的继承层次的复杂性,并且它的调试难度

    也增加了, 这些是很多人不愿意看到的事情。这样也就增加了开发的

    风险。所以能够想办法用单继承的来实现的东西最好避免使用多重继承。

      还有一种做法是使用混合类或者叫功能类,这个类中只放一些方法,

    来等待调用,这些方法都是共通的一些方法,而真正的数据都是存在于

    其他的类中。很多类都可以同他一起派生出新的类出来,但我们不必担

    心会有同名方法的存在,因为方法很多都是在这个功能类中。

      这里说到同名方法,解决同名方法的问题还可以利用虚继承的方法,

    如果有个Animal类,从他派生出来的Horse类和Bird类有一个共同的基

    类,从Horse和Bird多重继承而派生出来的Pegasus类在调用Animal中

    的一些方法的时候我们就需要采取一些方式,不然编译器不知道该通过

    Horse还是Bird去调用这个方法。就像一个人告诉你去找监护人的哥哥,

    这个时候你就迷惑了,是找爸爸的还是妈妈的哥哥?所以我们这个地方

    或者采用显示的限定:

        Horse::方法名; 来实现

    或者就利用这里说到的虚继承。就是让Horse和Bird有一个共同的基类

    而不是连个基类的拷贝!真很重要。如果是拷贝那么他们通过不同的父类

    调用的方法是不一样的。所以通过虚继承。我们让Pegasus在实例化的时

    候自己去实例化Animal的部分。那么编译器就知道该如何去调用Animal中

    的方法了。

       虚继承:

      class Horse : virtual public Animal .....

      class Bird : virtual public Animal...

      class Pegasus : public Horse, public Bird.....

    如此就完成了虚继承,在写Pegasus的构造函数的时候一定也要把Animal

    的部分声明好,这个时候就不是通过他们任何一个去继承下来的Animal了,

    而实际是自己进行构造的部分。在使用调用的时候就不用担心以上的问题了。

      

  • 相关阅读:
    13.kubernetes之pv,pvc,configmap(带补充实例)
    1.docker 数据卷的备份和恢复(非大数据量)
    mysql基础 事务的认识和使用
    jdbc基础 (四) 批处理
    jdbc基础 (三) 大文本、二进制数据处理
    mysql使用基础 sql语句(一)
    linux下安装openssh-server
    jdbc基础 (二) 通过properties配置文件连接数据库
    jdbc基础 (一) MySQL的简单使用
    windows API 开发飞机订票系统 图形化界面 (四)
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1400082.html
Copyright © 2011-2022 走看看