栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

C++ | 菱形继承与虚继承

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ | 菱形继承与虚继承

文章目录
  • 前言
  • 一、菱形继承是什么?
  • 二、没有虚继承的情况
    • 1.具体代码
    • 2.结构图
  • 二、有虚继承的情况
    • 1.具体代码
    • 2.结构图
  • 总结


前言

简单介绍一下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) {}
	//Object的对象构造只会执行一次,在Base和Test中不再进行构造
private:
	int total;
};
int main()
{
	Det d;
	return 0;
}
2.结构图

总结

提示:这里对文章进行总结:
虚继承主要解决菱形继承中属性存在二义性的问题。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1041049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号