下面是我写的一个菱形集成的利用虚继承里解决二义性的例子
虚继承和继承的区别在于:
继承是is的关系,是说子类是属于父类的。 而虚继承是has的关系,是子类有一个指针指向了父类。 这两者的区别在内存的角度比较容易区别开。
#include <iostream>
using namespace std;
class teacher
{
public:
char a;
void display()
{
cout << "[verlink]:hello teacher" << endl;
}
};
class Student: public virtual teacher
{
public:
char a;
void print()
{
cout << "[verlink]:hello student" << endl;
}
};
class Student1 : public virtual teacher
{
public:
char a;
void print()
{
cout << "[verlink]:hello student1" << endl;
}
};
class Child : public Student , public Student1
{
public:
char b;
};
int main()
{
Child ss;
ss.display();
}
输出的结果是 [verlink]: hello teacher
通过虚继承而消除了二义性,不会报错,如果不是虚继承的话是肯定会报错ambiguous的