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

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

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

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

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

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

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

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

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

  • 相关阅读:
    eBay要怎么转型?
    一张图让你看懂javascript各类型的关系
    闭包概念,匿名函数
    浅析Javascript闭包的特性
    深入理解JavaScript闭包(closure)
    深入理解JavaScript作用域和作用域链
    WPF 学习笔记(一)
    ChromiumWebBrowser flash不能自动播放问题解决方案
    饱含辛酸开发 WPF CustomControl
    KMP算法备忘
  • 原文地址:https://www.cnblogs.com/Acapplella/p/13301840.html
Copyright © 2011-2022 走看看