• 多重继承的问题


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

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

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

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

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

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

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

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

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

    如果有个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了,

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

      

  • 相关阅读:
    基于python检测端口是否在使用
    一行CMD命令kill(杀)掉你的进程
    Python 线程与进程
    Linux07 文件查找(locate、find )及特殊权限(SUID、SGID、Sticky)
    Linux06 vim文本编辑器的使用
    Linux04 shell编程1
    Linux03 重定向,管道,文件查找(grep)
    Linux02(目录、文件、用户、用户组管理)
    Linux01
    pytest装饰器
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1400082.html
Copyright © 2020-2023  润新知