虚继承与虚基类

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

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

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

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

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

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

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

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

原文链接: https://www.cnblogs.com/Acapplella/p/13301840.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    虚继承与虚基类

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/365900

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午4:25
下一篇 2023年3月2日 下午4:25

相关推荐