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

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

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

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

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

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

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

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

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

  • 相关阅读:
    用js获取当前页面的url
    innerHTML 和 innertext 以及 outerHTML
    scrollWidth,clientWidth与offsetWidth的区别
    top、postop、scrolltop、offsetTop、scrollHeight、offsetHeight、clientHeight
    两个文字向上滚动案列
    mysql 经典案例
    学习笔记11
    顺时针打印矩阵
    重建二叉树
    镜像二叉树
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13301840.html
Copyright © 2011-2022 走看看