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

C++中多重继承详解及其作用介绍

多重继承 (multiple inheritance): 一个派生类有两个或多个基类, 派生类从两个或多个基类中继承所需的属性. C 为了适应这种情况, 允许一个派生类同时继承多个基类. 这种行为称为多重继承.优缺点优点自然地做到了对单继承的扩展可以继承多个类的功能缺点结构复杂化优先顺序模糊功能冲突声明多重继承的方法格式多重继承的格式:1234567派生类构造函数名(总形式参数表列):基类1构造函数(实际参数表列),基类2构造函数(实际参数表列),基类3构造函数(实际参数表列){派生类中新增数成员据成员初始化语句}例子Teacher 类:1234567891011121314151617#ifndef PROJECT5_TEACHER_H#define PROJECT5_TEACHER_H#include stringusingnamespacestd;classTeacher {protected:string name;intage;string title;public:Teacher(string n,inta, string t);voiddisplay_teacher();};#endif //PROJECT5_TEACHER_HTeacher.cpp:1234567891011#include iostream#include Teacher.husingnamespacestd;Teacher::Teacher(string n,inta, string t) : name(n), age(a), title(t) {}voidTeacher::display_teacher() {cout Teacher name: name endl;cout age: age endl;cout title: title endl;}Student 类:1234567891011121314151617#ifndef PROJECT5_STUDENT_H#define PROJECT5_STUDENT_H#include stringusingnamespacestd;classStudent {protected:string name;chargender;doublescore;public:Student(string n,charg,doubles);voiddisplay_student();};#endif //PROJECT5_STUDENT_HStudent.cpp:1234567891011#include iostream#include Student.husingnamespacestd;Student::Student(string n,charg,doubles) : name(n), gender(g), score(s) {}voidStudent::display_student() {cout Student name: name endl;cout gender: gender endl;cout score: score endl;}Graduate 类1234567891011121314151617#ifndef PROJECT5_GRADUATE_H#define PROJECT5_GRADUATE_H#include Teacher.h#include Student.h#include stringusingnamespacestd;classGraduate :publicTeacher,publicStudent{private:doublewage;public:Graduate(string t_n,intt_a, string t_t, string s_n,chars_g,doubles_s);voiddisplay_graduate();};#endif //PROJECT5_GRADUATE_HGraduate.cpp:12345678910#include Graduate.hGraduate::Graduate(string t_n,intt_a, string t_t, string s_n,chars_g,doubles_s) :Teacher(t_n, t_a, t_t),Student(s_n, s_g, s_s) {}voidGraduate::display_graduate() {display_teacher();display_student();}main:12345678910#include iostream#include Graduate.husingnamespacestd;intmain() {Graduate graduate1(王叔叔, 18,隔壁老王,我是小白呀,f, 99);graduate1.display_graduate();return0;}输出结果123456Teacher name: 王叔叔age: 18title: 隔壁老王Student name: 我是小白呀gender: fscore: 99二义性二义性 (Ambiguity) 指在多重继承中, 两个基类中的数据成员名相同.二义性在派生类中的解决方法:在标识符前用类名做前缀: Teacher::name 和 Student::name基类和派生类需要有一个完整的设计, 不能随意而为两个基类有同名成员A 类:12345678910111213#ifndef PROJECT5_A_H#define PROJECT5_A_H#include iostreamusingnamespacestd;classA {public:intnum;voiddisplay() {cout As num: num endl;};};#endif //PROJECT5_A_HB 类:12345678910111213#ifndef PROJECT5_B_H#define PROJECT5_B_H#include iostreamusingnamespacestd;classB {public:intnum;voiddisplay() {cout Bs num: num endl;};};#endif //PROJECT5_B_HC 类:123456789101112131415#ifndef PROJECT5_C_H#define PROJECT5_C_H#include iostream#include A.h#include B.husingnamespacestd;classC:publicA,publicB{public:intc;voiddisplay() {cout c endl;};};#endif //PROJECT5_C_Hmain:12345678910111213#include iostream#include C.husingnamespacestd;intmain() {C c1;c1.A::num 1;// 用基类名限定c1.B::num 2;// 用基类名限定c1.A::display();c1.B::display();return0;}输出结果:12As num:1Bs num:2错误的写法1234567891011#include iostream#include C.husingnamespacestd;intmain() {C c1;c1.num 1;c1.display();return0;}基类和派生类有同名成员A 类:12345classA {public:intnum;voiddisplay() {cout As num: num endl;};};B 类:12345classB {public:intnum;voiddisplay() {cout Bs num: num endl;};};C 类:12345classC:publicA,publicB{public:intnum;voiddisplay() {cout Cs num: num endl;};};main:1234567891011intmain() {C c1;c1.num 3;c1.A::num 1;c1.B::num 2;c1.display();c1.A::display();c1.B::display();return0;}输出结果:123Cs num:3As num:1Bs num:2同名覆盖:基类的同名成员在派生类中被屏蔽, 成为 不可见的对成员函数, 限于函数名和参数个数相同, 类型相匹配. 若只有函数名相同而参数不同, 属于函数重载两个基类从同一个基类派生N 类:1234567classN {public:inta;voiddisplay(){cout A::a a endl;}};A 类:1234classA :publicN {public:inta1;};B 类:1234classB :publicN {public:inta2;};C 类:12345classC:publicA,publicB{public:inta3;voiddisplay() {cout a3 a3 endl;};};main:12345678intmain() {C c1;// 合法访问c1.A::a 3;c1.A::display();return0;}输出结果:1A::a3到此这篇关于C/C中多重继承详解及其作用介绍的文章就介绍到这了,
http://www.gsyq.cn/news/1357818.html

相关文章:

  • 2026年深圳日式搬家品牌推荐,这几家服务细节值得留意 - 兔兔不是荼荼
  • 【电路板】基于matlab模拟电路板激光加工中的热分布【含Matlab源码 15559期】
  • 二刷hot100-101.对称二叉树
  • 2026年惠州黄金回收门店推荐,品质之选尽在其中 - 黄金上门回收
  • 网易季报图解:营收306亿,净利108亿 游戏拉动增长,贡献84%收入
  • 系统架构师学校计划
  • 如何从零开始搭建ESP32智能语音助手:xiaozhi-esp32-server完整实战指南
  • 2026 苏州高评价上门回收黄金实测:哪家靠谱不踩坑? - 速递信息
  • taotoken的openai兼容协议让现有应用迁移成本降至最低
  • 2026年海口黄金回收平台深度盘点,标杆企业花落谁家? - 黄金上门回收
  • 基于深度学习+AI的玉米叶片病害目标检测与预警系统(Python源码+数据集+UI可视化界面+YOLOv11训练结果)
  • 洛雪音乐终极音源解决方案:如何构建多平台FLAC无损播放生态?
  • Windows Redis 7.0 终极安装与配置指南:从零开始掌握高性能内存数据库
  • TVBoxOSC:打造全能电视媒体中心的终极解决方案
  • 电机正反转深度解析
  • linux系统之进程管理详解
  • 家用扫地机器人技术发展路线浏览版-模块八:机械结构与工业设计
  • 豆包 一键导出Word文档,公式不乱码,用AI导出鸭,快到我以为手机开了挂
  • 协议分层传输、TCP报头与TCP三次握手介绍
  • 心理学论文降AI工具免费推荐:2026年心理学毕业论文知网维普降AI4.8元亲测完整方案
  • 如何用嘎嘎降AI处理哲学论文:哲学毕业论文降AI4.8元完整操作教程 - 还在做实验的师兄
  • QQ音乐加密音频快速解密指南:3分钟掌握qmcdump终极解决方案
  • 3D打印工作流革命:用Blender3mfFormat插件无缝衔接设计与制造
  • 2012–2024年 上市公司供应链透明度指数数据+代码
  • Kotlin 跨平台 SqliteNow 全平台数据持久化方案
  • 2026年贵阳室内装修设计全案深度横评:从设计落地到智能家居的品质突围指南 - 优质企业观察收录
  • 市面上有哪些是真正性价比高的降AIGC软件(轻松压低AI生成疑似率)
  • postman学习
  • Qt 高级开发 011: 跨线程信号槽实战
  • 公开课PPT模板哪家强?这几款不容错过!