C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++ 虚继承

c++ 虚继承的实现示例

作者: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++ 虚继承内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文