虚继承中的内存布局
直接看例子就好:
#include "qdatetime.h" class Person { public: Person(QString name, QDate birthdate) QObject(name.ascii()), m_Birthdate(birthdate) {} Person(const Person& p) : QObject(p), m_Birthdate(p.m_Birthdate) {} private: QDate m_Birthdate; }; class Student : virtual public Person { 1 // other class members }; class Teacher : virtual public Person { 2 // other class members } class GraduateTeachingFellow : public Student, public Teacher { 3 public: GraduateTeachingFellow(const Person& p, const Student& s, const Teacher& t): Person(p), Students(s), Teacher(t) {} 4
Note keyword virtual here. |
|
virtual inheritance. |
|
virtual not needed here. |
|
It is necessary to initialize all virtual base classes explicitly in multiply-derived classes, to resolve ambiguity about how they should be initialized. |
Each instance of a class that virtually inherits from another has a pointer (or a variable offset) to its virtual
base class subobject. 看来这里每个虚继承类的实例代表的是Student和Teacher都会有一个指针指向虚基类的 virtual
base class subobject。具体这里怎么翻译还得查查