news 2026/2/8 23:14:53

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/2/8 23:09:11

基于Spring Boot的绥大学生学习平台管理系统的设计与实现

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华
网站建设 2026/2/8 22:45:10

哪些招聘软件平台效果好?最新招聘平台权威排行

哪些招聘软件平台效果好&#xff1f;最新招聘平台权威排行在求职竞争日益激烈的当下&#xff0c;选择一个高效、真实、匹配度高的招聘平台&#xff0c;已成为职场人成功入职的关键一步。据《中国日报网》《新京报》等多家权威媒体2025—2026年报道&#xff0c;传统“海投简历”…

作者头像 李华
网站建设 2026/2/8 22:27:12

技术的便利,从来都不属于开发者

技术的便利&#xff0c;从来都不属于开发者 我们总被灌输一个共识&#xff1a;技术的发展是为了让人类更轻松。打开手机就能完成支付&#xff0c;点击鼠标就能部署应用&#xff0c;滑动屏幕就能连接世界——这些触手可及的便利&#xff0c;让每个人都能感受到技术迭代的温度。但…

作者头像 李华
网站建设 2026/2/8 22:20:33

燃爆!大数据OLAP在电力行业的创新应用

燃爆&#xff01;大数据OLAP在电力行业的创新应用 摘要/引言 "2023年夏季&#xff0c;某省电网在用电高峰期间成功避免了大规模停电事故&#xff0c;这背后是一个每天处理超过10亿条电力数据的OLAP系统在默默支撑。"这个真实案例揭示了一个不争的事实&#xff1a;电…

作者头像 李华
网站建设 2026/2/8 22:15:46

Java毕设项目推荐-基于springboot的学生宿舍管理系统的设计与实现宿舍资源管理、学生入住、费用管理、设备报修、访客登记【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/8 22:11:47

llm使用 AgentScope-Tuner 通过 RL 训练 FrozenLake 智能体

agentscope-samples/tuner/frozen_lake at main agentscope-ai/agentscope-samples --- agentscope-samples/tuner/frozen_lake at main agentscope-ai/agentscope-samples At least 2 NVIDIA GPUs with CUDA 12.8 or newer 至少需要 2 块 NVIDIA GPU&#xff0c;支持 CUDA 1…

作者头像 李华