[C++ 从入门到精通] 13.派生类、调用顺序、继承方式、函数遮蔽

  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:

      • 一. 派生类概念
      • 二. 派生类对象定义时,调用构造函数的顺序
      • 三. 继承方式
      • 四. 函数遮蔽


一. 派生类概念

派生类:在C++中,继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为「基类」,又称为「父类」;新建立的类称为「派生类」,又称为「子类」。

继承:「派生类」从已有的「基类」那里获得其相关特性(一些公用的成员变量和成员函数),这种现象称为类的继承。「继承」是面向对象程序设计的核心思想之一。好处:可以减少代码量,这样在写派生类的时候,只写与派生类相关的成员变量和成员函数即可,公用的相关功能可以直接从基类中继承使用。

继承的书写格式class 子类名 : 继承方式(public/protected/private) 父类名

举例

class Human  //父类
{
public:Human();Human(int &a);	~Human();void print(){std::cout << "执行了Human的成员函数print()" << std::endl;}public: int  m_age;        //年龄char m_name[100];  //名字
};
#include "Human.h"class Man : public Human //继承:表示Man是Human的子类
{
public:Man();~Man();private:int m_num;
};
#include "Human.h"
#include "man.h"int main()
{Man man;        //定义一个子类的对象   man.print();    //通过<对象.>的方式可以调用父类的函数print()man.m_num;      //通过<对象.>的方式可以调用自己的变量system("pause");return 0;
}

二. 派生类对象定义时,调用构造函数的顺序

继续上面的来:

Human::Human()
{std::cout << "执行了Human::Human()默认构造函数" << std::endl;
}
Man::Man()
{std::cout << "执行了Man::Man()默认构造函数" << std::endl;
}
int main()
{Man man;        / //当定义子类对象时,父类的构造函数也会调用的  system("pause");return 0;
}

在这里插入图片描述

可以看出,当定义子类Man对象时,不仅仅调用了子类Man的构造函数,也调用了父类Human的构造函数,而且是先调用。


三. 继承方式

🐕 三种访问权限:

  1. public:可以被任意实体访问;
  2. protected:只允许子类及本类的成员函数访问;
  3. private:只允许本类的成员函数访问

🐪 三种继承方式:public继承 、 protect继承和private继承

基类中的访问权限子类继承基类的方式子类得到的访问权限
public& public继承public
protected & public继承protected
private& public继承子类无权访问
public& protected继承protected
protected& protected继承protected
private& protected继承子类无权访问
public& private继承private
protected & private继承private
private& private继承子类无权访问

🐩 总结:

  1. public继承基类:不改变基类成员的访问权限
  2. protected继承基类:将基类中public成员变为子类的protected成员,其它成员的访问权限不变;
  3. private继承基类:使得基类所有成员在子类中的访问权限变为private
  4. 基类中的private成员不受继承方式的影响,子类永远无权访问;
  5. 对于基类来讲,尤其是基类的成员函数,如果不想让外面访问,就设置为private;如果想让子类能够访问,就设置为protected;如果想公开,就设置为public

四. 函数遮蔽

子类中如果有和父类一样的同名函数,那么子类对象则无法访问调用父类中的同名函数。

解决措施如下:

1、在子类的成员函数中,通过父类::同名函数来强制调用父类函数;

在这里插入图片描述

2、通过关键字using 让父类的同名函数在子类中可见;

在这里插入图片描述

ps:通过关键字using方法只适合子类和父类中的函数同名不同参数情况,可通过该方式调用父类同名函数;若子类和父类中的函数同名同参数情况,则还需使用方法一;


下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity细节】Default clip could not be found in attached animations list.(动画机报错)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

生产制造业如何谋求数字化转型?需要哪些信息化系统做支撑?

生产制造业的数字化转型是将数字系统和各种技术整合到传统制造流程中的过程&#xff0c;这将导致行业格局的重大变革。工业4.0的到来为制造业开创了一个新时代&#xff0c;制造商可以简化生产线&#xff0c;提高整体效率。同时&#xff0c;这一技术革命使他们能够收集到大量的数…

Altium Designer学习笔记9

忽视了一个最大的问题&#xff0c;就是元器件的封装&#xff0c;不应该是根据AD系统的封装走&#xff0c;而应该是根据立创商城上的规格书&#xff0c;确认每个封装的大小&#xff0c;画出封装图&#xff0c;然后才是布局和走线。 1、确认电容的封装采用0805&#xff0c;贴片电…

【css】Google第三方登录按钮样式修改

文章目录 场景前置准备修改样式官方属性修改样式CSS修改样式按钮的高度height和border-radiusLogo和文字布局 场景 需要用到谷歌的第三方登录&#xff0c;登录按钮有自己的样式。根据官方文档&#xff1a;概览 | Authentication | Google for Developers&#xff0c;提供两种第…

局域网协议:地址解析协议(ARP,Address Resolution Protocol)

地址解析协议&#xff08;ARP&#xff0c;Address Resolution Protocol&#xff09;是一种用于在IP网络中将IP地址映射到物理MAC地址的协议。在IP网络中&#xff0c;IP是用于寻址&#xff0c;真正将数据包从一个设备发送到另外一个设备&#xff0c;用于通信的是物理MAC地址。 …

40、Flink 的Apache Kafka connector(kafka sink的介绍及使用示例)-2

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

geemap学习笔记012:如何搜索Earth Engine Python脚本

前言 本节主要是介绍如何查询Earth Engine中已经集成好的Python脚本案例。 1 导入库 !pip install geemap #安装geemap库 import ee import geemap2 搜索Earth Engine Python脚本 很简单&#xff0c;只需要一行代码。 geemap.ee_search()使用方法 后记 大家如果有问题需…

如何提高图片转excel的效果?(软件选择篇)

在日常的工作中&#xff0c;我们常常会遇到一些财务报表类的图片需要转换成可编辑的excel&#xff0c;但是&#xff0c;受各种条件的限制&#xff0c;常常只能通过手工录入这种原始的方式来实现&#xff0c;随着人工智能、深度学习以及网络技术的发展&#xff0c;这种原始的录入…

SpringBoot集成七牛云OSS详细介绍

&#x1f4d1;前言 本文主要SpringBoot集成七牛云OSS详细介绍的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&a…

【Java工具篇】Java反编译工具Bytecode Viewer

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++高阶(四)】红黑树深度剖析--手撕红黑树!

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 红黑树 1. 前言2. 红黑树的概念以及性质3. 红黑…

计算机网络之数据链路层

一、概述 1.1概述 物理层发出去的信号需要通过数据链路层才知道是否到达目的地&#xff1b;才知道比特流的分界线 链路(Link)&#xff1a;从一个结点到相邻结点的一段物理线路&#xff0c;中间没有任何其他交换结点数据链路(Data Link)&#xff1a;把实现通信协议的硬件和软件…

电商API接口|电商数据接入|拼多多平台根据商品ID查商品详情SKU和商品价格参数

随着科技的不断进步&#xff0c;API开发领域也逐渐呈现出蓬勃发展的势头。今天我将向大家介绍API接口&#xff0c;电商API接口具备独特的特点&#xff0c;使得数据获取变得更加高效便捷。 快速获取API数据——优化数据访问速度 传统的数据获取方式可能需要经过多个中介环节&…

华大基因认知障碍基因检测服务,助力认知障碍疾病防控

认知障碍是一种严重的神经系统疾病&#xff0c;对人类的脑健康产生了重大影响。据报告显示&#xff0c;在我国65岁以上的人群中&#xff0c;存在轻度认知障碍的患者约为3,800万&#xff0c;而中重度痴呆患者则约为1,500万&#xff0c;患病人口数量庞大。这种疾病不仅会对患者的…

免费多域名SSL证书

顾名思义&#xff0c;免费多域名SSL证书就是一种能够为多个域名或子域提供HTTPS安全保护的证书。这意味着&#xff0c;如果您有三个域名——例如example.com、example.cn和company.com&#xff0c;您可以使用一个免费的多域名SSL证书为所有这些域名提供安全保障&#xff0c;而无…

TransFusionNet:JetsonTX2下肝肿瘤和血管分割的语义和空间特征融合框架

TransFusionNet: Semantic and Spatial Features Fusion Framework for Liver Tumor and Vessel Segmentation Under JetsonTX2 TransFusionNet&#xff1a;JetsonTX2下肝肿瘤和血管分割的语义和空间特征融合框架背景贡献实验方法Transformer-Based Semantic Feature Extractio…

AI写代码 可以代替人工吗?

近年AI技术非常火热&#xff0c;有人就说&#xff0c;用AI写代码程序员不就都得下岗吗&#xff1f;对此我的回答是否定的&#xff0c;因为AI虽然已经有了编写代码的能力&#xff0c;但它现在的水平大多还仅限于根据业务需求搭建框架&#xff0c;而具体的功能实现还尚且稚嫩&…

【愚公系列】保姆级教程带你实现HarmonyOS手语猜一猜元服务

&#x1f680;前言 最近HarmonyOS NEXT大火&#xff0c;这个纯血鸿蒙吸引力了大家的关注。虽然现在还没面向个人开发者开放&#xff0c;但我们可以基于最新的API9及开发工具来尝试开发鸿蒙新的应用形态——元服务。来体验下未来在HarmonyOS NEXT上实现的应用开发。 HarmonyOS…

什么是高防IP?有什么优势?怎么选择高防IP?

在当今的互联网环境中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击已经成为一种常见的安全威胁。这种攻击通过向目标服务器发送大量的无效流量&#xff0c;使其无法处理正常的请求&#xff0c;从而达到迫使服务中断的目的。作为一个用户&#xff0c;你是否曾遇…

QGIS文章五——对遥感影像进行土地类型分类—监督分类(dzetsaka : classification tool)...

dzetsaka classification tool是QGIS的强大分类插件&#xff0c;目前主要提供了高斯混合模型分类器、Random Forest、KNN和SVM四种分类器模型&#xff0c;相比于SCP(Semi-Automatic Classification)&#xff0c;他的一个特点就是功能专一&#xff0c;操作简单。 从十一月开始一…