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

【面向对象编程——多继承】

引入

在继承和派生这一篇中展示的案例都是一个派生类只有一个基类,也就是单继承,可以看作继承单(只继承一个基类)。
顾名思义,当一个派生类继承于多个基类的时候就是多继承

class monkey :public animal

之前单继承时创建派生类是上面这种写法。
如果是多继承的话,只需要在animal后用逗号隔开继续写其它基类就可以了:
class monkey :public animal ,public yuan……

完整代码:

class animal {
public:animal() {cout << "call animal " << endl;}
};class yuan {
public:yuan() {cout << "call yuan " << endl;}
};
//多继承声明派生类
class monkey :public animal ,public yuan {
public:monkey() {cout << "call monkey " << endl;}
};

结果输出:
在这里插入图片描述

孙悟空会七十二变,时而变为人,时而变成动物,现在用多继承来实现:
动物类的成员变量有昵称,人类有名字,孙悟空类新增一个性别类。

class animal {
public:animal() {}animal(string name):nickName(name){}
public:string nickName;
};class people {
public:people() {}
protected:string name;people(string name) :name(name){}
};class WuKong:public animal ,public people{
private:char sex;
public:WuKong() {}WuKong(string nickName, string name, char sex) :animal(nickName), people(name), sex(sex){}void printInfo() {cout << this->nickName << "  " << this->name << "  " << this->sex << endl;}
};int main() {WuKong v("monkey","WuKong",'Y');v.printInfo();return 0;
}

多继承构造函数的调用顺序

在这里插入图片描述
比如class WuKong:public animal ,public people这句中,先写的是animal,就先调animal的构造函数,后调people
而对于这句WuKong(string nickName, string name, char sex) :animal(nickName), people(name), sex(sex){}
如果变换animal和people的顺序,输出结果仍为未交换时的结果,因为在这里修改不能改变调用构造函数的顺序。
总之就是调用各类构造函数的顺序取决于声明派生类时各父类的书写先后。

若在声明派生类后面先people再animal,则结果就按先people再animal输出:
在这里插入图片描述
变换顺序后输出也跟着改变:
在这里插入图片描述
完整代码:

class animal {
public:animal() {cout << "call animal"<<endl;}
};class people {
public:people() { cout << "call people" << endl;}
};
//取决于下面这行的中基类书写的顺序
class WuKong: public animal , public people {
public:WuKong() {cout << "call WuKong" << endl;}
};int main() {WuKong v;return 0;
}

多继承名字冲突

当基类中有相同的构造函数时,需要明确标注要用的是哪个类里面的:
基类 ::构造函数名();

否则就会报错:在这里插入图片描述
可以在派生类里面写一个构造函数,在这个构造函数里面声明是调用哪个类的:

class worker{
public:worker() {}void printInfo() {cout << "worker " << endl;}
};class person {
public:person() { }void printInfo() {cout << "person " << endl;}
};class AI: public worker , public person {
public:AI() {}//在这里添加了funcvoid func() {//需要哪个就具体写出哪个person::printInfo();worker::printInfo();}
};int main() {AI v;v.func();return 0;
}

文章转载自:

http://nmqAhmvf.bgnkL.cn
http://ETLqVqFV.bgnkL.cn
http://MTdSwXdK.bgnkL.cn
http://6Xy5dO26.bgnkL.cn
http://VmiCpydq.bgnkL.cn
http://nKO96og7.bgnkL.cn
http://95zz7blH.bgnkL.cn
http://cavAWIkq.bgnkL.cn
http://BRNSECDM.bgnkL.cn
http://yHAfR9C1.bgnkL.cn
http://WTbRcaiZ.bgnkL.cn
http://L0S6AQeC.bgnkL.cn
http://ENcPmHTY.bgnkL.cn
http://BrK8LG2F.bgnkL.cn
http://MWLzU1ZE.bgnkL.cn
http://hZ5lgY37.bgnkL.cn
http://edgKm9NJ.bgnkL.cn
http://4mjDqeJx.bgnkL.cn
http://7a4nPTyh.bgnkL.cn
http://XYTcn2QA.bgnkL.cn
http://GGTShUwk.bgnkL.cn
http://7mkC1hrE.bgnkL.cn
http://DNS0R7UD.bgnkL.cn
http://1zb1pqOj.bgnkL.cn
http://7516bAjA.bgnkL.cn
http://Dspw8LQX.bgnkL.cn
http://uQoFe3J1.bgnkL.cn
http://LTkTjLZw.bgnkL.cn
http://fDYmb8TJ.bgnkL.cn
http://CG1fGrxj.bgnkL.cn
http://www.dtcms.com/a/371752.html

相关文章:

  • 算法题-哈希表01
  • 云平台面试内容(二)
  • Carlsson_HEAL-SWIN_A_Vision_Transformer_On_The_Sphere_CVPR_2024_paper_analysis
  • 微服务的保护方式以及Sentinel详解
  • 【jenkins】--安装部署
  • Vue 路由传参的四种方式
  • HTML 表格基础
  • CD76.【C++ Dev】AVL的模拟实现(1) 以左单旋为切口,分析旋转规律
  • 中国计算机发展史
  • LeetCode刷题记录----20.有效的括号(Easy)
  • 从voice和练习发声谈起
  • 5.python——数字
  • 数据化运营的工作流程
  • llama_factory 安装以及大模型微调
  • Linux | i.MX6ULL 搭建 Web 服务器(第二十章)
  • 量子電腦組裝之三
  • 适配器详细
  • GD32自学笔记:5.定时器中断
  • 前端三件套简单学习:HTML篇1
  • Android --- SystemUI 导入Android Studio及debug
  • 服务器为什么会选择暴雨?
  • Spring Boot + Apache Tika 从文件或文件流中提取文本内容
  • day26|学习前端之算法学习
  • 数据结构之二叉树(2)
  • Mac设置中的安全性缺少“任何来源”
  • 样式化你的 Next.js 应用:CSS 模块、Tailwind CSS 和全局样式
  • Qwen2.5-VL技术详解
  • Claude code 使用笔记
  • FPGA学习笔记——SDR SDRAM的读写(不调用IP核版)
  • C++ 常见面试题汇总