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

c++ 虚继承

测试菱形继承问题:

void testXuJicheng() {// 反面教材。一个基类被中间俩个派生类继承,最终的子类同时继承这俩个中间派生类,形成的类继承关系图像是菱形结构。// 菱形继承导致二义性与数据冗余问题。class Biology {public:string name;};class Bird : public Biology {};class Man: public Biology {};// 假设有一种生物BirdMan同时继承Bird和Manclass 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和Manclass BirdMan : public Bird, public Man {}; BirdMan b;b.name = "安德森";cout << "a BirdMan, name: " << b.name << endl;
}

打印:

ok. 

http://www.lqws.cn/news/466057.html

相关文章:

  • 【软考高级系统架构论文】论云上自动化运维及其应用
  • 嵌入式开发之嵌入式系统架构如何搭建?
  • Spring与SLF4J/Logback日志框架深度解析:从源码看日志系统设计
  • elasticsearch安装ik分词器
  • 3.1 Android NDK交叉编译FFmpeg
  • 领域驱动设计(DDD)【3】之事件风暴
  • React 重识
  • Seata模式
  • Spring AOP全面详讲
  • 从 Elasticsearch 集群中移除一个节点
  • `customRef` 在实战中的使用:防抖、计算属性缓存和异步数据获取
  • 腾讯云IM即时通讯:开启实时通信新时代
  • nuxt3 + vue3 分片上传组件全解析(支持大文件+断点续传)
  • RabbitMQ 的工作流程
  • 【unitrix】 3.6 类型级数转基础类型(from.rs)
  • springboot通过独立事务管理器实现资源隔离与精准控制​
  • HTTPS的加密方式介绍
  • MinIO社区版文件预览失效?一招解决
  • 【Fargo】mediasoup发送2:码率分配、传输基类设计及WebRtcTransport原理
  • React 组件通信
  • C++ 移动构造:提升性能的利器
  • docker执行yum报错Could not resolve host: mirrorlist.centos.org
  • Snapchat矩阵运营新策略:亚矩阵云手机打造高效社交网络
  • C++:动态链接库的编写,__declspec 用法详解
  • 7.3.2_2平衡二叉树的删除
  • 【RTP】基于mediasoup的RtpPacket的H.264打包、解包和demo 1:不含扩展
  • windows下docker虚拟文件大C盘迁移D盘
  • GPT-1 与 BERT 架构
  • TodoList 案例(Vue3): 使用Composition API
  • 基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计