虚继承中的内存布局
直接看例子就好:
#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。具体这里怎么翻译还得查查


浙公网安备 33010602011771号