菱形继承存在二义性和数据冗余的问题。菱形继承体系中包含多份父类对象的数据冗余和浪费空间的问题。而虚继承解决了这些问题,但是虚继承在解决这些问题的同时也带来了性能上的损耗。
菱形继承
class Person
{
public:
void f();
protected:
string name;
};
class Student:virtual public Person
{
protected:
int b;
};
class Teacher :virtual public Person
{
protected:
int c;
};
class Assistant :virtual public Student, virtual public Teacher
{
public:
void g();
private:
int d;
};