当前位置: 首页 > news >正文

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

#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;
}

运行结果:

http://www.lryc.cn/news/479853.html

相关文章:

  • React Native的生命周期
  • linux系统中涉及到用户管理的命令知识
  • LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)
  • Dubbo负载均衡
  • PymuPDF4llm提取pdf文件文字、表格与图片
  • 20241108通过iperf3确认中科创达的高通CM6125的WIFI的网速【失败】
  • Stored procedures in PostgreSQL
  • 第10章 多表查询
  • 【基于LSM的ELF文件安全模块设计】参考
  • 全卷积和全连接
  • Unity图形学之Shader结构
  • 离散时间信号的产生
  • 物联优化汽车齿轮锻造
  • CocosCreator 构建透明背景应用(最新版!!!)
  • 使用CentOS宝塔面板docker搭建EasyTier内网穿透服务
  • HTMLCSS: 实现可爱的冰墩墩
  • 天地图入门|标注|移动飞行|缩放,商用地图替换
  • Flutter PC端UI组件库
  • NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备汇聚公共资源场景方案全析
  • 干部谈话考察系统:革新传统,精准高效
  • 反转链表(Leetcode)
  • 制作游戏外挂的技术栈有哪些
  • python下载pdf
  • 我们来学mysql -- 同时使用 AND 和 OR 查询错误(填坑篇)
  • 关于Websocket
  • vue2 pdf 链接地址打开
  • c# 动态lambda实现二级过滤(多种参数类型)
  • 34.Redis事务
  • 认识类和对象
  • 解决echarts桑基图为0时tooltip不显示的问题