首先掌握菱形继承的概念,即两个子类继承同一个父类,而又有新的子类同时继承这两个子类。编写程序,构建一个不带虚拟继承的菱形继承,以及一个带虚拟继承的菱形继承。可以参考一下命名方式,不带虚拟继承的父类为A,两个子类为B1、B2,继承B1、B2的子类为C,带虚拟继承的父类为VA,两个子类为VB1、VB2,继承VB1、VB2的子类为VC,基类A与VA中需要包含一个整型成员变量。在主函数中,通过内存容量度量函数sizeof()分别对int、V、VC进行测量并显示,程序解决方案平台为X86。
时间: 2024-02-21 14:02:06 浏览: 15
好的,我了解了你的问题。下面是代码实现:
不带虚拟继承的菱形继承:
```c++
#include<iostream>
using namespace std;
class A{
public:
A(int a = 0):m_a(a){}
protected:
int m_a;
};
class B1:public A{
public:
B1(int b = 0):m_b1(b){}
protected:
int m_b1;
};
class B2:public A{
public:
B2(int b = 0):m_b2(b){}
protected:
int m_b2;
};
class C:public B1,public B2{
public:
C(int c = 0):m_c(c){}
void print(){cout<<"C:"<<m_a<<","<<m_b1<<","<<m_b2<<","<<m_c<<endl;}
private:
int m_c;
};
int main(){
cout<<"sizeof(int):"<<sizeof(int)<<endl;
cout<<"sizeof(A):"<<sizeof(A)<<endl;
cout<<"sizeof(B1):"<<sizeof(B1)<<endl;
cout<<"sizeof(B2):"<<sizeof(B2)<<endl;
cout<<"sizeof(C):"<<sizeof(C)<<endl;
return 0;
}
```
带虚拟继承的菱形继承:
```c++
#include<iostream>
using namespace std;
class A{
public:
A(int a = 0):m_a(a){}
protected:
int m_a;
};
class VA{
public:
VA(int va = 0):m_va(va){}
protected:
int m_va;
};
class VB1:virtual public VA{
public:
VB1(int vb1 = 0):m_vb1(vb1){}
protected:
int m_vb1;
};
class VB2:virtual public VA{
public:
VB2(int vb2 = 0):m_vb2(vb2){}
protected:
int m_vb2;
};
class VC:public VB1,public VB2{
public:
VC(int vc = 0):m_vc(vc){}
void print(){cout<<"VC:"<<m_va<<","<<m_vb1<<","<<m_vb2<<","<<m_vc<<endl;}
private:
int m_vc;
};
int main(){
cout<<"sizeof(int):"<<sizeof(int)<<endl;
cout<<"sizeof(A):"<<sizeof(A)<<endl;
cout<<"sizeof(VA):"<<sizeof(VA)<<endl;
cout<<"sizeof(VB1):"<<sizeof(VB1)<<endl;
cout<<"sizeof(VB2):"<<sizeof(VB2)<<endl;
cout<<"sizeof(VC):"<<sizeof(VC)<<endl;
return 0;
}
```
希望这样可以帮到你!