C++进阶——继承

前言:从这篇文章开始,我们进入C++进阶知识的分享,在此之前,我们需要先来回顾一个知识:

C++语言有三大特性,分别是封装、继承和多态,而我们前边所分享的各种容器类,迭代器等,它们所体现的就是封装

  • 将数据和方法放在一起,能够给用户访问就设为公有,不给用户访问就设为私有或保护。
  • 可以将一个类型放到另一个类型里边,通过typedef成员函数调整,封装出一个全新的类型。

这篇文章,我们将分享C++的第二大特性——继承


目录

一.何为继承

二.继承方式 

 三.继承关系

四.父类和子类对象赋值转换

五.继承中的作用域

六.派生类的默认构造函数

七.其他简单知识

总结


一.何为继承

举个例子:

在学校这一个大的教育机构中,有学生,老师,保安,宿管等等人员的存在。这些人的身份不同,那么就会有一些自己所独有的标签,比如学生有学生号,老师有职工号等。但是他们同时也都有共同的特性,比如姓名,年龄等等

他们有共同的标签,也有独有的标签,如果每个身份都要单独为他们创造标签,这样是不是过于繁琐,于是就有了继承的概念:

封装一个父(基)类,里边封装有这些人所具有的共同属性,比如姓名,年龄。随后通过父类继承出多个子(派生)类,子类既可以拥有父类中的属性,也可以自己建立自己独有的属性


二.继承方式 

class Person
{
public:
	void Print()
	{
		cout << "name:" << _name << endl;
		cout << "age:" << _age << endl;
	}
	string _name;//姓名
	int _age;//年龄
};

class Student : public Person
{
protected:
	int _stuid;//学号
};
class Teacher : public Person
{
protected:
	int _jobid;//职工号
};

来看,Person作为父类,用于一个成员函数和两个成员变量Student和Teacher通过"public"方式继承父类,同时也拥有自己的成员变量。来看测试:

 

能够看出,子类能够使用父类中的成员变量而后成员函数。


 三.继承关系

在类中有public、protected、private三种访问方式。这些访问方式的不同,会影响到子类对父类中的成员变量和函数的访问

这三种访问方式可以理解为三级权限,public为低级权限,protected为中级权限,private为高级权限

这里给出最简单的理解方法,较低级的权限要向较高级的权限低头。 

前边在类的讲解中我们没有分享protected和private的区别,这里我们给出二者的区别:

父类的private成员在类外任何地方都不能被访问,包括派生类,而父类的protected成员可以在派生类中访问

一般情况下,public继承是最常用的

此外,我们知道struct也可以定义类,也可以继承父类,它与class的区别是:

  • struct默认的继承方式和访问限定符为public。
  • class默认的继承方式和访问限定符为private。

四.父类和子类对象赋值转换

通过标题,我们能够得出信息,父类对象和子类对象直接可以赋值,但是这里我先强调:只能由子类对象赋值给父类对象,而不能父类对象赋值给子类对象

直接来看例子:

要注意的是,父类对象只能得到自己继承下去的成员变量的信息,而不能得到子类自己的成员变量

除此之外,我们还可以通过父类对象的引用或指针来访问或修改子类对象的成员变量

因为父类对象中没有子类对象的成员变量,所以不能对其赋值。 


五.继承中的作用域

  1. 在继承体系中父类和子类都有独立的作用域
  2. 子类和父类中有同名成员在调用该成员时,子类会默认调用自己的成员,这种情况叫隐藏,也叫重定义。(在子类成员函数中,可以使用 基类::基类成员 显示访问父类的同名成员
  3. 需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏与参数无关
  4. 注意在实际中在继承体系里面最好不要定义同名的成员

来看实例:

class Person
{
public:
	void Print()
	{
		cout << "name:" << _name << endl;
		cout << "age:" << _age << endl;
	}
	string _name;//姓名
	int _age;//年龄
	int _num = 0;
};

class Student : public Person
{
public:
	void fun()
	{
		cout << _num << endl;
		cout << Person::_num << endl;

	}
protected:
	int _stuid;//学号
	int _num = 1;
};

这里我们分别在Person和Student类中都定义了名为_num的成员变量,并在Student类中定义fun函数来打印二者,结果如下:

 

能够看出,默认情况下访问的是Student类自己的_num,加了域作用限定符后才会调用父类的_num。同名成员函数同理


六.派生类的默认构造函数

6个默认成员函数,“默认”的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类中,这几个成员函数是如何生成的呢?

  1. 派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显示调用。
  2. 派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。
  3. 派生类的operator=必须要调用基类的operator=完成基类的复制。
  4. 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。
  5. 派生类对象初始化先调用基类构造再调派生类构造。
  6. 派生类对象析构清理先调用派生类析构再调基类的析构。

总结来说, 子类自己的成员变量调用自己的默认成员函数,而继承自父类的成员则需调用父类的默认成员函数父类没有的,就在子类中补充


七.其他简单知识

  1. 父类的友元,子类无法直接使用,但也可以将该友元定义在子类中,成为子类的友元。
  2. 父类的静态成员,与所有的子类共用。
  3. 一个子类可以同时继承多个父类,但是不推荐这样设计。

总结

关于继承的知识就分享这么多,喜欢本篇文章记得一键三连,我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/551720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的“线上教学平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“线上教学平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 线上教学平台结构图 管理员登录界面图 学员管理界…

网络工程师-----第一天

线缆与进制转换 进制转换: 1.十进制&#xff1a; 都是以0-9这九个数字组成&#xff0c;不能以0开头。 2.二进制&#xff1a; 由0和1两个数字组成。 3.八进制&#xff1a; 由0-7数字组成&#xff0c;为了区分与其他进制的数字区别&#xff0c;开头都是以0开始。 4.十六进制…

Python数据结构【二】查找

前言 可私聊进一千多人Python全栈交流群&#xff08;手把手教学&#xff0c;问题解答&#xff09; 进群可领取Python全栈教程视频 多得数不过来的计算机书籍&#xff1a;基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。 &#x1f680;&a…

手动实现简易版RPC(下)

手动实现简易版RPC(下) 前言 什么是RPC&#xff1f;它的原理是什么&#xff1f;它有什么特点&#xff1f;如果让你实现一个RPC框架&#xff0c;你会如何是实现&#xff1f;带着这些问题&#xff0c;开始今天的学习。 接上一篇博客 手动实现简易版RPC&#xff08;上&#xff…

抖音小店运营计划表年度电商规划管理模板

【干货资料持续更新&#xff0c;以防走丢】 抖音小店运营计划表年度电商规划管理模板 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音店铺运营表格 &#xff08;完整资料包含以下内容&#xff09; 目录 抖音店铺运营计划&#xff1a; 一、店铺定位与目标…

MySql运维篇

目录 一.日志 1.1日志分类 1.2Error Log 1.3BinaryLog 1.4SlowQuery Log 二.备份 2.1备份原因 2.2备份目标 2.3备份技术 2.3.1物理备份 2.3.2逻辑备份 2.4备份方式 2.4.1完全备份 2.4.2增量备份 2.4.3差异备份 2.5备份环境准备 2.6完全备份实验 2.6.1完全备…

书生·浦语大模型全链路开源体系-第4课

书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…

连锁服装卖场进销存一般怎么管理

连锁服装卖场的进销存管理是保证业务顺畅运作和最大化利润的关键之一。随着市场竞争的加剧和消费者需求的变化&#xff0c;良好的进销存管理能够帮助企业及时调整库存&#xff0c;减少滞销品&#xff0c;提高资金周转率&#xff0c;从而增强市场竞争力。本文将探讨连锁服装卖场…

单独设置浏览器滚动条上下箭头

解决方法 重点 ::-webkit-scrollbar-button:vertical 给垂直方向的滚动条设置样式 ::-webkit-scrollbar-button:vertical:start 上方向的按钮 ::-webkit-scrollbar-button:vertical:start:decrement 上方向单个按钮 下方向同理 不知道为啥搜索出来的single-button不生效&#…

制造业的数字化转型如何做?

随着科技的迅速发展&#xff0c;数字化转型已经成为制造型企业提高竞争力的关键因素。它可以帮助制造型企业&#xff0c;在产品优化设计、材料采购、生产流程方面实现精细化管理&#xff1b;提升上下游协同生产能力&#xff0c;提高生产效率、降低生产成本、优化产品质量&#…

华为的AI战略地图上,才不是只有大模型

大模型火热了一年&#xff0c;现在还没做AI化改造的企业&#xff0c;就像是工业革命浪潮伊始与火车赛跑的那辆马车。 最早的蒸汽火车缓慢又笨重&#xff0c;甚至铁轨上还预留了马匹行走的空间&#xff0c;以便随时用马拉火车来替代蒸汽火车&#xff0c;一辆华丽的马车试图和火…

浮点数的存储方式、bf16和fp16的区别

目录 1. 小数的二进制转换2. 浮点数的二进制转换3. 浮点数的存储3.1 以fp32为例3.2 规约形式与非规约形式 4. 各种类型的浮点数5. BF16和FP16的区别Ref 1. 小数的二进制转换 十进制小数转换成二进制小数采用「乘2取整&#xff0c;顺序排列」法。具体做法是&#xff1a;用 2 2…

C++语言·类和对象

1. 类的引入 C语言结构体中只能定义变量&#xff0c;但在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数&#xff0c;同时C中struct的名称就可以代表类型&#xff0c;不用像C那样为了方便还要typedef一下。 在C中我们管定义的结构体类型叫做类(student)&a…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库 一、新建仓库 新建仓库教程 注意&#xff1a;远程仓库的初始文件不要与本地存在名字一样的文件&#xff0c;不然拉取会因为冲突而失败。可以把远程一样的初始文件删…

汇舟问卷:推荐一个挣外国人钱项目

在海外&#xff0c;问卷调查作为一种普遍的市场研究手段&#xff0c;它们能够为企业下一季度的营销策略调整提供有力的数据支撑。 每份问卷的报酬金额各不相同&#xff0c;最低为1美元&#xff0c;最高可以达到10几美元。大多数问卷的报酬在3到5美元之间。 然而&#xff0c;在…

JS-42-Node.js01-Node.js介绍

一、浏览器大战 众所周知&#xff0c;在Netscape设计出JavaScript后的短短几个月&#xff0c;JavaScript事实上已经是前端开发的唯一标准。 后来&#xff0c;微软通过IE击败了Netscape后一统桌面&#xff0c;结果几年时间&#xff0c;浏览器毫无进步。&#xff08;2001年推出…

HDFS详解(Hadoop)

Hadoop 分布式文件系统&#xff08;Hadoop Distributed File System&#xff0c;HDFS&#xff09;是 Apache Hadoop 生态系统的核心组件之一&#xff0c;它是设计用于存储大规模数据集并运行在廉价硬件上的分布式文件系统。 1. 分布式存储&#xff1a; HDFS 将文件分割成若干块…

【游戏云服务器推荐】幻兽帕鲁 我的世界 雾锁王国 饥荒联机版 英灵神殿通用云服务器 2-64G随意选 附最新价格对比

更新日期&#xff1a;4月17日&#xff08;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】2024年-幻兽帕鲁服务器专…

李飞飞团队发布《2024年人工智能指数报告》,预测人工智能未来发展趋势

昨天&#xff0c;斯坦福大学 Human-Center Artificial Intelligence (HAI)研究中心发布了《2024年人工智能指数报告》。 由斯坦福大学发起的人工智能指数&#xff08;AI Index&#xff09;是一个追踪 AI 动态和进展的非营利性项目&#xff0c;旨在全面研究 AI 行业状况&#xf…

不同质量图在卡尔曼滤波相位解缠中应用探讨

文献来源&#xff1a;不同质量图在卡尔曼滤波相位解缠中应用探讨 闫 满&#xff0c;郭春华 测绘科学技术, 2019, 7(2), 65-73 卡尔曼滤波将相位解缠转化为状态估计问题&#xff0c;实现相位解缠与噪声消除的一并处理。通过建立相位的动 态方程和观测方程来求解真实相位&#x…
最新文章