直接看例子就好:
#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 { 3public: 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。具体这里怎么翻译还得查查