news 2026/4/16 7:45:03

C++之多重继承

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++之多重继承

文章目录

  • 名字冲突
  • 钻石继承(菱形继承)与虚继承
  • C++允许一个类从一个或多个基类派生
  • 如果一个类只有一个基类,称为单一继承。如果一个类具有两个或两个以上的基类,就称为多重继承
class派生类名:继承方式 基类名1, 继承方式 基类名2...{};

#include<iostream>usingnamespacestd;classPhone{private:string m_number;public:Phone(conststring&number){m_number=number;}voidcall(conststring&number){cout<<m_number<<"打给: "<<number<<endl;}};classPlayer{public:Player(conststring&media){m_media=media;}voidplay(conststring&music){cout<<m_media<<"正在播放: "<<music<<endl;}private:string m_media;//播放器的名称};classComputer{private:string m_os;//使用的操作系统public:Computer(conststring&os):m_os(os){}voidrun(conststring&app){cout<<"在"<<m_os<<"正在运行: "<<app<<endl;}};/*典型的多重继承*/classSmartPhone:publicPhone,publicPlayer,publicComputer{public:SmartPhone(conststring&number,conststring&media,conststring&os):Phone(number),Player(media),Computer(os){}};intmain(void){SmartPhonehuawei("13988888888","MP4","鸿蒙");huawei.call("010-12345");huawei.play("我和我的祖国");huawei.run("王者荣耀");return0;}

名字冲突

  • 当两个不同基类拥有同名成员时,容易产生名字冲突问题
  • 使用域限定符解决
#include<iostream>usingnamespacestd;classA{public:voidfunc(void){cout<<"A::func()"<<endl;}};classB{public:voidfunc(void){cout<<"B::func()"<<endl;}};classC:publicA,publicB{};intmain(void){C test;test.A::func();return0;}

钻石继承(菱形继承)与虚继承

  • 钻石继承,一个派生类继承的多个基类又源自一个公共的祖先(公共基类)

#include<iostream>usingnamespacestd;classA{protected:intm_data;public:A(intdata){m_data=data;cout<<"A(int)"<<endl;}};classB:publicA{public:B(intdata):A(data){cout<<"B(int)"<<endl;}voidset(intdata){m_data=data;}};classC:publicA{public:C(intdata):A(data){cout<<"C(int)"<<endl;}intget(void){returnm_data;}};classD:publicB,publicC{public:D(intdata):B(data),C(data){cout<<"D(int)"<<endl;}};intmain(void){Dd(100);cout<<sizeof(d)<<endl;cout<<d.get()<<endl;// 100d.set(200);cout<<d.get()<<endl;//100return0;}
  • 以上set(200)后还是100
  • 解决方式:虚继承
  • 虚继承语法:
    • 在继承表使用virtual关键字修饰
    • 位于继承链末端子类负责构造公共基类子对象

#include<iostream>usingnamespacestd;classA{protected:intm_data;public:A(intdata){m_data=data;cout<<"A(int)"<<endl;}};classB:virtualpublicA{public:B(intdata):A(data){cout<<"B(int)"<<endl;}voidset(intdata){m_data=data;}};classC:virtualpublicA{public:C(intdata):A(data){cout<<"C(int)"<<endl;}intget(void){returnm_data;}};classD:publicB,publicC{public:D(intdata):B(data),C(data),A(data){cout<<"D(int)"<<endl;}};intmain(void){Dd(100);cout<<sizeof(d)<<endl;cout<<d.get()<<endl;// 100d.set(200);cout<<d.get()<<endl;//200return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 17:10:10

【YOLOv12多模态创新改进】全网独家复现创新 | TGRS 2025 | 引入MROD-YOLO的 MSIA多尺度迭代聚合模块,优化可见光与红外信息的特征交互融合、提升复杂环境中小目标检测效果

一、本文介绍 🔥本文给大家介绍使用 MSIA多尺度迭代聚合模块改进 YOLOv12 多模态目标检测模型,可在特征融合阶段通过多尺度通道注意力引导的迭代聚合机制,充分强化高层语义特征与低层细节特征之间的交互,避免小目标信息在多模态、多尺度融合过程中被高层特征淹没。MSIA 能…

作者头像 李华
网站建设 2026/3/28 9:28:15

jsp德育管理系统63rh0--程序+源码+数据库+调试部署+开发环境

本系统&#xff08;程序源码数据库调试部署开发环境&#xff09;带论文文档1万字以上&#xff0c;文末可获取&#xff0c;系统界面在最后面。 系统程序文件列表 学生,教师,公告信息,德育成绩,德育项 开题报告内容 一、选题缘由 随着信息技术的飞速发展和教育现代化的推进&a…

作者头像 李华
网站建设 2026/4/10 22:52:04

轻松绘制合同审批流程图画图操作便捷不费力超省事

良功绘图网站 (https://www.lghuitu.com ) 在企业、高校、事业单位的日常运营管理中&#xff0c;合同审批是核心的业务流程之一&#xff0c;小到几千元的小额采购&#xff0c;大到上百万的重大项目合作&#xff0c;都需要依托清晰、规范的合同审批流程来保障业务合规开展、权责…

作者头像 李华
网站建设 2026/3/26 23:24:09

局域网内如何互相ping通?

&#x1f3c6;本文收录于 《全栈 Bug 调优&#xff08;实战版&#xff09;》 专栏。专栏聚焦真实项目中的各类疑难 Bug&#xff0c;从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解&#xff0c;形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

作者头像 李华
网站建设 2026/4/16 5:59:53

计算机字符编码

一、有关编码的基础知识 1. 位 bit 最小的单元 字节 byte 机器语言的单位 1byte8bits 1KB1024byte 1MB1024KB 1GB1024MB 2. 二进制 binary 八进制 octal 十进制 decimal 十六进制 hex 3. 字符&#xff1a;是各种文字和符号的总称&#xff0c;包括各个国家的文字&#xff0c;标点…

作者头像 李华
网站建设 2026/4/16 5:59:31

Android开发工程师深度解析:技术能力与职业发展

博耳(无锡)电力成套有限公司 Android/安卓开发工程师 职位信息 职位描述: 1. Android平台应用开发; 2. 新需求和新技术的评估; 3. 应用模块问题定位与分析解决。 职位要求: 1. 有较强的JAVA语言编程基本功 2. 三年以上Android应用开发经验; 3. 具备良好的职业素养和团队…

作者头像 李华