C++虚继承演示

在继承中如果出现:

这种情况,B和C都继承了A,D继承了B、C

在D中访问A的成员会出现:

这样的警告

是因为在继承时A出现两条分支:ABD、ACD

编译器不知道访问的A中的元素是经过B继承还是C继承

所以B、C在继承A时要用到虚继承virtual

即:

class B : virtual public A

class C : virtual public A

cpp 复制代码
#include <iostream>

using namespace std;

class A
{
private:
	int m_a;
public:
	A(int a);
	void print();
};

A::A(int a)
{
	m_a = a;
}

void A::print()
{
	cout << "m_a = " << m_a << endl;
}

class B : virtual public A
{
private:
	int m_b;
public:
	B(int a, int b);
	void print();
};

B::B(int a, int b) : A(a)
{
	m_b = b;
}

void B::print()
{
	cout << "m_b = " << m_b << endl;
}

class C : virtual public A
{
private:
	int m_c;
public:
	C(int a,int c);
	void print();
};

C::C(int a, int c) : A(a)
{
	m_c = c;
}

void C::print()
{
	cout << "m_c = " << m_c << endl;
}

class D : public B, public C
{
private:
	int m_d;
public:
	D(int a, int b, int c, int d);
	void print();
};

D::D(int a, int b, int c, int d) : A(a), B(a, b), C(a, c)
{
	m_d = d;
}

void D::print()
{
	A::print();
	B::print();
	C::print();
	cout << "m_d = " << m_d << endl;
}

int main()
{
	D d(1, 2, 3, 4);
	d.print();
	return 0;
}

运行结果:

相关推荐
im_AMBER35 分钟前
算法笔记 18 二分查找
数据结构·笔记·学习·算法
C雨后彩虹1 小时前
机器人活动区域
java·数据结构·算法·华为·面试
MarkHD1 小时前
车辆TBOX科普 第53次 三位一体智能车辆监控:电子围栏算法、驾驶行为分析与故障诊断逻辑深度解析
算法
苏小瀚1 小时前
[算法]---路径问题
数据结构·算法·leetcode
月明长歌2 小时前
【码道初阶】一道经典简单题:多数元素(LeetCode 169)|Boyer-Moore 投票算法详解
算法·leetcode·职场和发展
wadesir2 小时前
C语言模块化设计入门指南(从零开始构建清晰可维护的C程序)
c语言·开发语言·算法
t198751282 小时前
MATLAB水声信道仿真程序
开发语言·算法·matlab
CoderYanger3 小时前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
Xの哲學4 小时前
Linux RTC深度剖析:从硬件原理到驱动实践
linux·服务器·算法·架构·边缘计算
狐574 小时前
2025-12-04-牛客刷题笔记-25_12-4-质数统计
笔记·算法