c++ 虚继承的实现示例

 更新时间:2025年06月23日 09:14:31   作者:zh_xuan  
本文主要介绍了c++ 虚继承的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

测试菱形继承问题:

void testXuJicheng() {
	// 反面教材。一个基类被中间俩个派生类继承,最终的子类同时继承这俩个中间派生类,形成的类继承关系图像是菱形结构。
	// 菱形继承导致二义性与数据冗余问题。
	class Biology {
	public:
		string name;
	};

	class Bird : public Biology {};

	class Man: public Biology {};

	// 假设有一种生物BirdMan同时继承Bird和Man
	class BirdMan : public Bird, public Man {}; 

	BirdMan b;
	b.name = "birdMain";
}

可以看到编译错误:BirdMan::name不明确。

原因是,成员变量name从俩个父类中继承到,这里不知道是指的哪个。

代码修改为:

void testXuJicheng() {
	class Biology {
	public:
		string name;
	};

	class Bird : virtual public Biology {}; // 虚继承

	class Man: virtual public Biology {}; // 虚继承

	// 假设有一种生物BirdMan同时继承Bird和Man
	class BirdMan : public Bird, public Man {}; 

	BirdMan b;
	b.name = "安德森";
	cout << "a BirdMan, name: " << b.name << endl;
}

打印:

到此这篇关于c++ 虚继承的实现示例的文章就介绍到这了,更多相关c++ 虚继承内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从使用角度解读c++20 协程示例

    从使用角度解读c++20 协程示例

    类比线程,线程是个函数,把这个函数交给 创建线程的api,然后这个函数就变成线程了,这个函数本身没有任何特殊的地方,就是普通函数,这篇文章主要介绍了从使用角度解读c++20 协程示例,需要的朋友可以参考下
    2023-01-01
  • C语言中函数栈帧的创建和销毁的深层分析

    C语言中函数栈帧的创建和销毁的深层分析

    在C语言中,每一个正在运行的函数都有一个栈帧与其对应,栈帧中存储的是该函数的返回地址和局部变量。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等
    2022-04-04
  • C++ 详解数据结构中的搜索二叉树

    C++ 详解数据结构中的搜索二叉树

    搜索二叉树是一种具有良好排序和查找性能的二叉树数据结构,包括多种操作,本篇只介绍插入,排序(遍历),和删除操作,重点是删除操作比较复杂
    2022-04-04
  • 深入解析C++编程中基类与基类的继承的相关知识

    深入解析C++编程中基类与基类的继承的相关知识

    这篇文章主要介绍了C++编程中基类与基类的继承的相关知识,包括多个基类继承与虚拟基类等重要知识,需要的朋友可以参考下
    2016-01-01
  • 基于C语言实现简易三子棋游戏

    基于C语言实现简易三子棋游戏

    这篇文章主要为大家详细介绍了基于C语言实现简易三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2022-01-01
  • C++ private、protected、public从入门到精通实例解析

    C++ private、protected、public从入门到精通实例解析

    本文介绍了C++中的访问控制关键字public、protected和private,包括它们的定义、规则和应用场景,同时,还探讨了继承中的访问控制以及友元的概念和使用,文章还提供了面试高频考点的标准答案,并总结了开发中最佳实践,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 快速入门的一些C\C++书籍

    快速入门的一些C\C++书籍

    这篇文章为大家精心推荐了一些快速入门的一些C\C++书籍,希望大家可以喜欢,对这门语言可以产生兴趣,需要的朋友可以参考下
    2015-12-12
  • VS2022 Git提交代码的实现

    VS2022 Git提交代码的实现

    本文主要介绍了VS2022 Git提交代码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • c++ 解析yaml文件的步骤

    c++ 解析yaml文件的步骤

    这篇文章主要介绍了c++ 解析yaml文件的步骤,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下
    2020-12-12
  • 一文搞懂C++中的四种强制类型转换

    一文搞懂C++中的四种强制类型转换

    很多朋友向小编了解C语言中怎么进行强制类型转换呢?在这小编告诉大家强制类型转换可以分为两种,一种是隐式类型转换一种是显示类型转换,下面通过示例代码给大家介绍下,需要的朋友参考下吧
    2021-07-07

最新评论