菱形继承:两个子类同时继承一个父类,而又有子类同时继承这两个子类
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class A
{
public:
int _a;
};
class B: public A
{
public:
int _b;
};
class C: public A
{
public:
int _c;
};
class D:public B,public C
{
public:
int _d;
};
int main()
{
D dd;
dd.B::_a = 1;
dd.B::_b = 2;
dd.C::_a = 3;
dd.C::_c = 4;
dd._d = 5;
cout << sizeof(dd) << endl;
system("pause");
return 0;
}
5个int型
虚继承解决菱形继承二义性和冗余
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class A
{
public:
int _a;
};
class B: virtual public A
{
public:
int _b;
};
class C: virtual public A
{
public:
int _c;
};
class D:public B,public C
{
public:
int _d;
};
int main()
{
D dd;
dd.B::_a = 1;
dd.B::_b = 2;
dd.C::_a = 3;
dd.C::_c = 4;
dd._d = 5;
cout << sizeof(dd) << endl;
system("pause");
return 0;
}
6个int型