天天看点

c++ 虚基类

参考:​​​​

​​https://blog.51cto.com/blogger/publish?old=1/h3f0123c6-341133757571bc8357579​​

​​http://c.biancheng.net/view/2280.html​​

虚基类不是自己声明的,而是由派生类声明的,应对于菱形继承的情况。这样一个类既可以作为虚基类也可以作为普通基类。

c++ 虚基类

此时类D有两条线间接继承类A。A<···B<···D,A<···C<···D

如果是正常继承,类D对象会有两份类A的的对象和函数,分贝来自B和C。

但是,通常情况下,类D对象只需要一块类A内存。

此时需要使用虚基类。

c++ 虚基类

这样在派生类D内只有一份A的拷贝,且在D内初始化虚基类A。不用担心在D中的A被初始化三次,编译器会确保。

在类D的继承关系出,我们可以下图这样写。此时D对象中也只有一份A的函数和变量,但是如果有类继承自D,又容易产生菱形继承的二义性问题。

c++ 虚基类

继续阅读