从零开始的C++(十四)

继承:

作用:减少重复代码,简化程序。

用法:

class b:public a
{//...b中成员
}

在如上代码中,b类以public的方式继承了a类。规定a类是父类、基类,b类是子类、派生类。

关于继承方式:

包括public、portect、private

其中:public会保存父类成员原本的约束,如public修饰的成员仍是public,protect修饰得到仍是protec。  protect会把public约束的修改成protect约束,其余不变。 private会使得都是private约束。注:在父类中,受private约束的成员在子类中为不可见,无法使用也无法调用。

如果不加继承方式,class默认是private,struct默认是public。

赋值:

1.派生类的对象可以赋值给基类的对象、指针或引用,这叫切割、切片。

基类的对象不能赋值给派生类的对象。

基类的指针或引用可以通过强制类型转换的方式付给派生类的指针或引用,但是只有原本基类的指针指向派生类对象时才安全,不会出现越界访问。

作用域:

1.基类和派生类的作用域是独立的。

2.在基类和派生类中,如果出现重名的函数则会发生隐藏,即子类屏蔽父类的同名成员,这也叫重定义。此时要想访问父类中的该成员,则需要父类::父类成员来访问。

3.应注意对于同名函数,只要函数名相同就会被隐藏,无关参数列表和返回值。

默认成员函数:

1.如果父类无默认构造函数,则子类需要显示调用父类构造函数。

2.对于子类拷贝构造,需要显示调用父类拷贝构造。

3.子类赋值函数需要调用父类构造函数完成父类成员的赋值。

4.子类调用析构函数会自动调用父类析构函数。

5.对于子类,会先调用父类构造函数在调用子类构造函数,会先调用子类析构函数在调用父类析构函数。

6.由于子类和父类的析构函数会被编译器处理成同名函数destrutor(),因此父类和子类的析构函数会发生隐藏。

友元:

友元函数和友元类无法被继承。

静态成员:

静态成员相当于被子类和父类所共有,即仍是只有一份。

无法继承的类:

1.父类构造函数私有,此时子类无法显示调用父类构造函数,,因此无法构成继承。

2.加final修饰父类,此时规定该类无法被继承。

单继承:

子类只有一个直接父类。

多继承:

子类有两个及以上的直接父类。

菱形继承:

如图,此时b、c类继承a类,d类继承b类和c类,出现了菱形继承。

特点:d类中含有两份a类成员,一份从b类中继承来,一份从c类中继承来,会有二义性,即通过d类的对象访问a类的成员,无法确定是访问的b中继承来的还是c中继承来的。

解决方法:将b类和c类设置成虚继承,即b类和c类前加virtual。此时d类中只有一份a类的成员,b类继承来的那份a类变成一个指针,指针指向的空间存放当前距离d类中存放a类成员的地址的偏移量,c类中相同。

多态:

作用:同一个函数名,产生不同的效果。

产生条件:

1.继承关系

2.子类和父类中有虚函数,要求函数名、参数列表、返回值均一致。

3.父类的指针或引用调用该虚函数。

注:

1.父类中必须在虚函数前加virtual,子类可以不加virtual,此时仍可以构成多态。

2.子类和父类的返回值有些情况可以不同,比如返回值是父子类关系的指针和引用(可以是别的父子类)

3.析构函数只有是虚函数时才能正常使用,而不会发生隐藏。

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

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

相关文章

Qt::WindowFlags

Qt::WindowFlags 文章目录 Qt::WindowFlags摘要窗口&部件Qt::WindowFlags&WindowType窗口类型窗口提示 关键字: Qt、 Qt::WindowFlags、 Qt::WindowType、 关键字4、 关键字5 摘要 今天在公司解决自己的Bugs的时候,发现一个以前可以用的功…

在Kotlin中设置User-Agent以模拟搜索引擎爬虫

前言 随着双十一电商活动的临近,电商平台成为了狂欢的中心。对于商家和消费者来说,了解市场趋势和竞争对手的信息至关重要。在这个数字时代,爬虫技术成为了获取电商数据的有力工具之一。本文将以亚马逊为例,介绍如何使用Kotlin编…

软件测试面试题【2023最新合集】

收集了各大公司的面试经验,现整理出来,希望能给正在找工作的志同道合的小伙伴一些指引,本文会持续更新的哦。 1、 CPU 和 GPU的区别 一个是通用计算,一个是专用计算。 CPU主要负责操作系统和应用程序,GPU主要负责跟…

【BUG解决】服务器没报警但是应用接口崩了....

最近遇到一个突发问题:服务器没报警但是应用接口崩了… 为其他业务系统提供一个接口,平时好好的,突然就嚷嚷反馈说访问不了了,吓得我赶紧跳起来! 正常情况下在系统崩溃前,我会收到很多系统报警&#xff0…

【AI编程】ai编程插件汇总iFlyCode、codegeex

1、iFlyCode 开发公司:讯飞 支持IDE: VS Code、IntelliJ IDEA、CLion、PyCharm、WebStorm 支持语言: Python、JavaScript、C、Java 下载地址:https://iflycode.xfyun.cn/ iFlyCode 快捷键列表:  Tab 采纳建议  Esc 拒绝建议  Alt\ 主动…

CSDN每日一题学习训练——Java版(对给定的两个日期之间的日期进行遍历、子集 II、填充每个节点的下一个右侧节点指针)

版本说明 当前版本号[20231107]。 版本修改说明20231107初版 目录 文章目录 版本说明目录对给定的两个日期之间的日期进行遍历题目解题思路代码思路参考代码 子集 II题目解题思路代码思路参考代码 填充每个节点的下一个右侧节点指针题目解题思路代码思路参考代码 对给定的两…

Flink架构

1、Apache Flink集群的核心架构: 1、client(作业客户端):提交任务的地方叫做客户端 2、JobManager(作业管理器):作用是用于管理集群中任务 3、TaskManager(任务管理器)&a…

WPF布局与控件分类

Refer:WPF从假入门到真的入门 - 知乎 (zhihu.com) Refer:WPF从假入门到真的入门 - 知乎 (zhihu.com) https://www.zhihu.com/column/c_1397867519101755392 https://blog.csdn.net/qq_44034384/article/details/106154954 https://www.cnblogs.com/mq0…

unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图

这是一个Python的单元测试框架的示例代码,主要用于执行测试用例并生成测试报告。其中,通过unittest模块创建主测试类MainTestCase,并加载其他文件中的测试用例,统计用例的执行结果并将结果写入文件,最后生成一个简单的…

无人机航迹规划:五种最新智能优化算法(KOA、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法(KOA、COA、LSO、GRO、LO)简介 1、开普勒优化算法KOA 开普勒优化算法(Kepler optimization algorithm,KOA)由Mohamed Abdel-Basset等人于2023年提出。五种最新优化算法(SWO、ZOA、EVO、KOA、…

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割10(测试推理篇)

对于直接将裁剪的patch,一个个的放到训练好的模型中进行预测,这部分代码可以直接参考前面的训练部分就行了。其实说白了,就是验证部分。不使用dataloader的方法,也只需要修改少部分代码即可。 但是,这种方法是不end t…

Intel oneAPI笔记(4)--jupyter官方文档(Unified Shared Memory)学习笔记

前言 本文是对jupyterlab中oneAPI_Essentials/03_Unified_Shared_Memory文档的学习记录,主要包含对统一共享内存的讲解 USM概述 USM (Unified Shared Memory)是SYCL中基于指针的内存管理。对于使用malloc或new来分配数据的C和C程序员来说应该很熟悉。当将现有的C…

关于卷积神经网络的填充(padding)

认识填充 (padding) 随着卷积层数的加深,输出进一步缩小,那么最终会导致输出很快就只剩下1∗1的数组,这也就没办法继续计算了,所以提出了填充的方法来方便网络的进一步加深。 其实填充的原因有两点&#xf…

MapReduce:大数据处理的范式

一、介绍 在当今的数字时代,生成和收集的数据量正以前所未有的速度增长。这种数据的爆炸式增长催生了大数据领域,传统的数据处理方法往往不足。MapReduce是一个编程模型和相关框架,已成为应对大数据处理挑战的强大解决方案。本文探讨了MapRed…

ESP32 未来能够取代 STM32吗?

今日话题,ESP32 未来能够取代 STM32吗?ESP32和STM32各自有其特点和优势,能否取代彼此取决于具体应用和需求。STM32的流行除了性价比外,还有其强大的开发环境,例如Cubemx能够快速生成代码,使得上手STM32的速…

解决 win11 vmware 中centos 网络不能访问外网

解决 win11 vmware 中centos 网络不能访问外网 1、进入win11 高级设置,找到centos 虚拟机使用的网卡 2、看网卡的其他属性 3、按照红圈部分,配置成一样的就行 4、进入到虚拟机配置中,配置成如图一样的NAT模式 5、再进入编辑 -》虚拟网络编辑…

基于CLIP的图像分类、语义分割和目标检测

OpenAI CLIP模型是一个创造性的突破; 它以与文本相同的方式处理图像。 令人惊讶的是,如果进行大规模训练,效果非常好。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D…

vue中插槽slot

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分,不希望写死,希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分,改用&l…

AUTOSAR Gateway 功能

目录 AUTOSAR Gateway 功能1. Signal/SignalGroup 路由1.1 Signal/SignalGroup 路由的配置 2. PDU部分路由2.1 部分路由配置 3. PDU整体路由4. 总结 AUTOSAR Gateway 功能 Com 模块提供Signal 到Signal 的静态路由,或者SigGrp 到SigGrp的静态路由。通过ComGwMappin…

【VSS版本控制工具】

VSS版本控制工具 1 安装 VSS2 服务器端配置3 新建用户4 客户端配置Vss2005Vs20055 客户端详细操作 1 安装 VSS 第一步:将VisualSourceSafe2005安装包解压。 第二步:找到setup.exe双击运行。 第三步:在弹出的界面复选框中选中Iaccepttheterms…