文章目录
- 前言
- 一、菱形继承是什么?
- 二、没有虚继承的情况
-
- 二、有虚继承的情况
-
- 总结
前言
简单介绍一下C++中的菱形继承
提示:以下是本篇文章正文内容,下面案例可供参考
一、菱形继承是什么?
菱形继承:指有一个基类被两个不同的类所继承,且存在一个类继承于这两个类而形成的一种菱形关系,故称菱形继承。如下图所示:
如果Person中含有一个性别属性,在Base中是女,在Test中是男,那么在Stud_Elem中性别这个属性就会产生异议。
二、没有虚继承的情况
1.具体代码
代码如下(示例):
class Object
{
public:
Object(int x = 0) :value(x) {}
private:
int value;
};
class Base:public Object
{
public:
Base(int x = 0) :Object(x + 10), num(x) {}
private:
int num;
};
class Test:public Object
{
public:
Test(int x = 0) :Object(x + 10), sum(x) {}
private:
int sum;
};
class Det:public Base,public Test
{
public:
Det(int x = 0) :total(x),Base(x + 10), Test(x + 20) {}
private:
int total;
};
int main()
{
Det d;
return 0;
}
2.结构图
在Det的内存中存在着两个Object对象,一个是来自base的,一个是来自test的。
二、有虚继承的情况
1.具体代码
代码如下(示例):
class Object
{
public:
Object(int x = 0) :value(x) {}
private:
int value;
};
class Base:virtual public Object
{
public:
Base(int x = 0) :Object(x + 10), num(x) {}
private:
int num;
};
class Test:virtual public Object
{
public:
Test(int x = 0) :Object(x + 10), sum(x) {}
private:
int sum;
};
class Det:public Base,public Test
{
public:
Det(int x = 0) :total(x),Base(x + 10), Test(x + 20),Object(x+100) {}
private:
int total;
};
int main()
{
Det d;
return 0;
}
2.结构图
总结
提示:这里对文章进行总结:
虚继承主要解决菱形继承中属性存在二义性的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)