zoukankan      html  css  js  c++  java
  • 虚继承与虚基类

    • 虚继承产生原因: C++的多继承很容易产生命名冲突,为了解决这一问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。

    • 虚继承的本质: 让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类。在这种机制下,不论虚基类在继承体系中出现了多少次,在派生类中都只包含一份虚基类的成员。

    • 虚派生只影响从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身。

    • 在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。

    • 需要关注虚继承时的构造函数的执行顺序:虚继承时构造函数的执行顺序与普通继承时不同:在最终派生类的构造函数调用列表中,不管各个构造函数出现的顺序如何,编译器总是先调用虚基类的构造函数,再按照出现的顺序调用其他的构造函数;而对于普通继承,就是按照构造函数出现的顺序依次调用的。

    • 不同继承模式下的内存模型:

    1. 普通继承:基类子对象始终位于派生类对象的前面(也即基类成员变量始终在派生类成员变量的前面)。

    2. 虚继承:不管是被共享的虚基类的直接派生类还是间接派生类,虚基类的子对象始终位于派生类对象的最后面。

  • 相关阅读:
    tech 浅谈 Yield
    Python strip lstrip rstrip使用方法
    Python strip lstrip rstrip使用方
    Python 的学习脚印(1)
    python中列表的赋值
    python的re模块的sub方法
    Python的异常处理机制
    [python] shutil模块
    【ActiveMq】启动amq时遇到java.net.URISyntaxException: Illegal character in hostname at index处理方法
    【sql总结】
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13301840.html
Copyright © 2011-2022 走看看