继承:(开始C++的进阶)
我们今天来学习C++的进阶:
面向对象三大特性:封装,继承,多态。
封装我们在前面已经学了,我们细细理解,我们的类的封装,迭代器的封装(vector的迭代器可以是他的原生指针,list迭代器不能是他的原生指针,我们进行封装),适配器的封装(stack和queue的封装)。
我们今天就来学习他的第二大特性:继承;
继承:
继承其实就是我们把公共的成员提取出来,方成一个单独的类,然后让下面的类去继承;
这个就是设计层次的类的复用。
我们来看我们的继承:
下⾯我们看到没有继承之前我们设计了两个类Student和Teacher,Student和Teacher都有姓名/地址/ 电话/年龄等成员变量,都有identity⾝份认证的成员函数,设计到两个类⾥⾯就是冗余的。当然他们也有⼀些不同的成员变量和函数,⽐如⽼师独有成员变量是职称,学⽣的独有成员变量是学号;学⽣的独有成员函数是学习,⽼师的独有成员函数是授课。
我们看我们的上面的两个类,这两个类分别是代表的是学生和老师,但是我们发现这两个类的话,其中有一部分的函数和变量是一样的,他们有相同的成员变量和成员函数。
这样的话,设计是不是有一点冗余呢?是的。
这时候就是我们的继承的用法了:
我们看这个类,我们把这两个都有的类放到一起,构成一个新的类,这个新的类我们叫做父类。
我们看下面:
我们这里的继承是公有的继承,我们使用了public:来进行继承;
然后我们看我们现在的Student和Teacher类,这两个类现在里面有的数据就是他们自己也特有的数据,那他们以前的数据怎么办呢?
我们把他们之前的数据存起来的(父类)继承下来,继承给他们。这时候这两个类还是可以调用以前的函数和成员变量,他们都是还在的。
然后这些继承父类的类,我们叫他子类。
继承的方式:
如果我们想在父类里面和外面使用的话,我们就定义为public。
如果想在父类里面使用,外面不能使用的,但是继承的子类可以使用,我们就定义为protect。
如果父类里面使用,外面不能使用,继承的子类也不能使用的话,我们就定义为private。
当然如果是父类里面的private成员,无论怎样继承我们的子类都是不可见的,但是我们还有一种方法在子类中得到这个,我们可以在父类的public区域里面创建一个函数,
我们看这个代码,我们在我们的父类的public区域里面创造一个函数,父类的话,我们是可以使用我们的父类的private的成员变量的。在这个函数我们对我们的private的变量进行调整。
这个public的成员函数我们的继承的子类里面是可以调用的。
继承类模板:
我们的类模板也是可以被继承的:
我们之前实现我们的容器适配器Stack的时候,我们把我们的容器vector传过去,现在的话,我们把我们的vector继承给我们的Stack;
但是这个方式是没有我们之前学习Stack的时候,实现的,我们使用的组合的方式实现效果好的。
基类和派生类之间的转换:
我们看这个图片:Person表示我们的基类,Student表示我们的派生类。
临时对象:
我们看这个,我们之前学习的,我们看第一个图片,我们的i赋值给d,int类型的赋值给double类型的,里面存在着隐式类型转换,如果有隐式类型转换的话,他就会产生临时对象。
这时候我们看第二个图片,如果我们加上引用的符号的话,这时候就会报错,因为我们的临时对象具有常性,所以我们要引用的话就要加上const。这才是对的。
我们再看我们的自定义类型的:
我们的这个string,我们说单参数的构造函数支持隐式类型转换,这里"1111"
是const char*
类型的字符串字面量,这是一个常量字符串,编译器会隐式调用std::string
对应的单参数构造函数,将const char*
类型的"1111"
转换为std::string
类型,并初始化s1
。
我们的第二行的这个代码,我们引用了一个临时对象,还是临时对象具有常性。使用const防止被修改。
在 C++ 中,单参数的构造函数支持隐式类型转换,是指当一个构造函数只有一个参数时,编译器可以自动使用该构造函数将参数类型转换为类类型。
在上述代码中,MyClass
类有一个接受int
类型参数的单参数构造函数。在main
函数中,使用int
类型的10
初始化MyClass
类型的对象obj
,此时编译器会自动调用单参数构造函数,将10
隐式转换为MyClass
类型的对象。
这个都会产生临时对象;
但是我们这里的没有产生临时对象;这里我们的是特殊处理;他叫复制兼容转换;
我们继续看:
我们的派生类对象可以赋值给我们的基类的对象(这个我们后面讲解),但是我们的基类的对象不能赋值给我们的派生类。
继承中的作用域:
我们说我们的基类和派生类都有他自己的作用域。
这两个不同的作用域,我们可以有相同名字的变量。
我们看这个图片,当我们的基类和我们的派生类里面都有我们的相同名字的成员变量的时候,我们在我们的派生类里面,我们访问同名的成员变量的时候,我们访问的是派生类里面的。
派⽣类和基类中有同名成员,派⽣类成员将屏蔽基类对同名成员的直接访问,这种情况叫隐藏。(会把基类里面的成员变量屏蔽掉)(如果在派生类里面想要访问基类里面的成员的话,我们就要指定我们的类域);
需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。(只要是函数的名字一样,就构成隐藏,返回值和函数参数全都不看)。(在派生类里面把基类的函数隐藏了,如果派生类的对象想要使用基类里面的函数,我们就要指定作用域)
相关文章:
继承:(开始C++的进阶)
我们今天来学习C的进阶: 面向对象三大特性:封装,继承,多态。 封装我们在前面已经学了,我们细细理解,我们的类的封装,迭代器的封装(vector的迭代器可以是他的原生指针,li…...
【本地MinIO图床远程访问】Cpolar TCP隧道+PicGo插件,让MinIO图床一键触达
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言MinIO本地安装与配置cpolar 内网穿透PicGo 安装MinIO远程访问总结互动致谢参考目录…...
OpenCV数组的操作
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 这里的数组不是普通意义上的数组。核心模块Core专门提供了一些全局函数用于对数组(矩阵)进行操作。常用函数如表3-2所示。 3.2.1 寻找数组中最小值和最大值的位置(minMaxL…...
python idea pycharm ModuleNotFoundError: No module named ‘bin‘
一、解决方案 1.修正运行配置中的环境变量 2.打开运行配置: 3.点击 IDEA 右上角配置下拉菜单 -> Edit Configurations。 4.选择 Django Server 配置(或自定义的调试配置)。 5.移除错误变量: 5.1在 Environment var…...
自动驾驶创建场景(just soso)
使用 Driving Scenario Designer 创建弯道驾驶场景并导出模型的详细步骤整理与补充说明: 步骤 1:打开应用程序 启动 MATLAB在 MATLAB 命令窗口中输入以下命令,打开驾驶场景设计器:matlabCopy CodedrivingScenarioDesigne…...
大模型在轮状病毒肠炎预测及临床方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、轮状病毒肠炎概述 2.1 病毒特性与传播途径 2.2 临床症状与病理机制 2.3 流行病学特征 三、大模型技术原理及在医疗领域应用现状 3.1 大模型基本原理 3.2 医疗领域应用案例分析 3.3 大模型应用于轮状病毒…...
从 PyTorch 到 ONNX:深度学习模型导出全解析
在模型训练完毕后,我们通常希望将其部署到推理平台中,比如 TensorRT、ONNX Runtime 或移动端框架。而 ONNX(Open Neural Network Exchange)正是 PyTorch 与这些平台之间的桥梁。 本文将以一个图像去噪模型 SimpleDenoiser 为例&a…...
移动硬盘突然打不开紧急救援指南:从排查到完整恢复
突发状况的典型特征 当移动硬盘突然打不开时,用户常会遇到多种异常表现:接入电脑后硬盘指示灯虽亮但无法识别、系统反复提示“设备未连接成功”或弹出“磁盘结构损坏”的警告。部分情况下,资源管理器中的盘符虽可见,但双击后显示…...
HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法
HarmonyOS应用开发:父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域,组件之间的状态管理是一个至关重要的概念。通过有效的状态管理,我们可以确保应用的数据流动清晰、可预测,从而提升应用的稳定性和可维护性。本次实验…...
lodash-es 详解
import { cloneDeep } from lodash-es 是使用 ES Modules 语法从 lodash-es 包中按需导入 cloneDeep 函数。这是现代前端开发中推荐的使用 Lodash 的方式: 1. lodash-es 是什么? 它是 Lodash 的 ES Modules 版本(普通 lodas…...
使用nvm install XXX 下载node版本时网络不好导致npm下载失败解决方案
若nvm install ***安装报错解决方案: 离线安装Node.js npm,可直接下载Node.js 14.21.3的完整离线包(含npm): 访问 Node.js历史版本下载页:https://nodejs.org/download/release/v14.21.3/ 下载 node-v14.…...
VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试
VScodeOpenOCDCmakeHTOS栈回溯在国产32芯片上完全调试 说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https:…...
2025年最新版动漫短剧系统开发小程序app教程,源码部署上线
以下是动漫短剧系统开发上线的详细教程,包含从0到1的全流程: 一、需求分析(关键:明确核心功能) 核心功能清单: 用户端:短视频浏览、弹幕评论、收藏/点赞、创作者关注、付费订阅。创作者端&am…...
Java练习——day2(集合嵌套)
文章目录 练习1练习2练习3 练习1 给定一个字符串列表List words,统计每个单词出现的次数,并用Map<String, Integer>存储结果。 示例代码: import java.util.*;public class WordCount {public static void main(String[] args) {// 示…...
国产CPU处理器性能实测:龙芯/海光/兆芯/华颉VS英特尔和AMD!
最近后台总收到粉丝留言:"现在国产CPU到底行不行?想换电脑又怕国产的不够强"。今天咱们就掏心窝子聊聊这个话题——国产CPU处理器到底是"弯道超车"还是"贴牌组装"?性能真能和英特尔i5、AMD锐龙掰手腕吗&#x…...
Excel自定义函数取拼音首字母
1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表; 2.执行“工具 > 宏 > Visual Basic编辑器”命令(或者直接按“AltF11”组合键),进入Visual Basic编辑状态; 3.执行“…...
Vue3 SSR生物启发架构:仿生渲染与DNA流式编码
一、神经元弹性调度网络 1.1 突触连接式渲染集群 1.2 生物能效对比表 调度模式能耗(kWh/万次)突触延迟容错阈值信息熵利用率轮询调度4.2220ms60%35%蚁群算法2.8150ms75%48%神经形态调度0.945ms93%82%DNA协进化调度0.312ms99.9%95% 二、DNA流式编码协议 2.1 四碱基序列转换器…...
git的上传流程
好久没使用git 命令上传远程仓库了。。。。。温习了一遍; 几个注意点--单个文件大小不能超过100M~~~ 一步步运行下面的命令: 进入要上传的文件夹内,点击git bash 最终 hbu的小伙伴~有需要nndl实验的可以自形下载哦...
C++学习记录:
今天我们来学习一门新的语言,也是C语言最著名的一个分支语言:C。 在C的学习中,我们主要学习的三大组成部分:语法、STL、数据结构。 C的介绍 C的历史可追溯至1979年,当时贝尔实验室的本贾尼斯特劳斯特卢普博士在面对复杂…...
MAC-批量任务并行处理实现
批量任务并行处理示例(基于Spring框架) 以下是一个 完整可运行 的批量任务并行处理示例,包含 任务拆分、异步执行、线程池管理、耗时 监控 等核心功能,适用于数据清洗、文件处理、批量通知等场景。 1. 线程池配置 @Configuration @EnableA…...
《电子类专业:通往科技未来的钥匙》
一、电子类专业全景概览 在当今科技飞速发展的时代,电子类专业无疑占据着现代科技体系中基础与核心的重要地位。从我们日常生活中不可或缺的智能手机、电脑,到推动社会进步的人工智能、大数据技术,再到探索宇宙奥秘的航天航空设备,电子类专业的身影无处不在。它就像一把万…...
全链路开源数据平台技术选型指南:六大实战工具链解析
在数字化转型加速的背景下,开源技术正重塑数据平台的技术格局。本文深度解析数据平台的全链路架构,精选六款兼具创新性与实用性的开源工具,涵盖数据编排、治理、实时计算、联邦查询等核心场景,为企业构建云原生数据架构提供可落地…...
大塔集团乔迁开新局 企业赋能贯全程
2025年4月15 日,在佛山市佛山大道北175号,大塔集团乔迁开业盛大启幕,业界目光聚焦于此。 点睛仪式 揭牌仪式 彩绸飘扬、嘉宾云集,现场气氛热烈非凡,这一标志性时刻,宣告着大塔集团正式踏上全新发展征程。 …...
Ubuntu系统下部署 NFS服务教程
Ubuntu系统下部署 NFS服务教程 一、NFS 服务简介二、环境准备三、服务器端配置1. 安装 NFS 服务端2. 创建共享目录3. 配置共享规则4. 生效配置并启动服务四、客户端配置1. 安装 NFS 客户端2. 创建本地挂载点3. 挂载远程目录4. 验证挂载状态5. 测试读写五、高级配置技巧1. 开机自…...
shell编程正则表达式与文本处理器
目录 基础正则表达式 扩展正则表达式 sed工具使用方法 awk 工具使用方法 前言 在 Shell 编程的世界里,正则表达式与文本处理器是两大不可或缺的利器。正则表达式(RegularExpression,简称 RE)作为一种强大的字符串匹配工具,能够通过特定的字符组合来描述和匹配一系列符合特…...
SparseDrive---论文阅读
纯视觉下的稀疏场景表示 算法动机&开创性思路 算法动机: 依赖于计算成本高昂的鸟瞰图(BEV)特征表示。预测和规划的设计过于直接,没有充分利用周围代理和自我车辆之间的高阶和双向交互。场景信息是在agent周围提取ÿ…...
YOLOV8 OBB 海思3516训练流程
YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…...
ThinkPHP框架接入Stripe支付
我的框架是ThinkPHP5.0,后台是fastadmin 1.安装composer包,包名是 stripe/stripe-php 2.下单代码 <?php namespace app\common\service; use app\common\controller\Api; use Stripe\Stripe; use Stripe\Checkout\Session; use think\Config;clas…...
文件上传漏洞学习
什么是文件上传漏洞 文件上传漏洞指用户通过上传一个恶意的可执行文件,例如木马、病毒、webshell、恶意脚本等等在服务器中执行,配合其他工具,获得网站控制权或达到一些其他效果。 文件上传漏洞原理 由于对上传文件的格式限制不够严格&…...
【function call】大模型的hello function call
1. 所有的大模型的function call 功能就是将function 也当作输入到大模型中 2. 不同的平台或者模型调用的方式可能不一样 一个硅基流动的例子 import requests from openai import OpenAIclient = OpenAI(api_key="sk-vuffqulyakrzccyqenavdryxyamqkhemidvgaihdqmehmhlv&…...
CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络|文献速递-深度学习医疗AI最新文献
Title 题目 CVFSNet: A Cross View Fusion Scoring Network for end-to-end mTICI scoring CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络 01 文献速递介绍 中风目前是全球主要的致死原因之…...
解决 .Net 6.0 项目发布到IIS报错:HTTP Error 500.30
今天在将自己开发许久的项目上线的时候,发现 IIS 发布后请求后端老是报一个 HTTP Error 500.30 的异常,如下图所示。 后来仔细调查了一下发现是自己的程序中写了 UseStaticFiles 的依赖注入,这个的主要作用就是发布后端后,想…...
施磊老师基于muduo网络库的集群聊天服务器(一)
文章目录 技术栈项目需求环境安装muduo网络库安装编译错误:解决办法:移动头文件和库文件 redis和mysql安装验证mysql环境修改mysql密码Nginx--先不安装 Json介绍为什么需要json?什么是 json 序列化?常用的数据传输序列化格式?直接使用json第三方库json序列化代码演示复杂键值…...
WebStorm中Gitee账号的密码登录与令牌登录设置
1.账号密码添加 1.1安装插件 说明:安装Gitee插件 1.2点击通过账号密码登录 说明:需要Gitee账号和密码 1.3登录 说明:通过邮箱和密码登录 1.4登录成功 2.令牌登录 2.1Token登录 说明:需要Gitee生成的私人令牌进行登录。 2.2G…...
Android开发案例——简单计算器
实现计算机的简单功能 1、显示页面jsj.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height&…...
实现类似 “更新中” 的水平进度条按钮效果
如上图所示 activity_test3.xml <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent…...
【QT入门到晋级】QT打动态库包及引入动态库包
前言 本篇为持续更新状态,内容包含window、Linux下打动态库包,以及引入动态库包的方式。 一、window 1、动态库打包 以百度的OCR接口调用打dll库为例,以下为qtcreator创建动态库过程: 1.1Qtcreator创建lib项目 创建成功后&…...
Linux:解决 yum 官方源无法使用(CentOS 7)
文章目录 一、原因二、解决方法 一、原因 CentOS 7 在 2024年 6 月 30 日结束了它的生命周期(End of Life, EOL),这意味着官方不再提供更新和支持,包括其 yum 源也将停止服务。 因此对于仍然需要使用 CentOS 7 的用户来说&#…...
软考-高项,知识点一览十八 项目绩效域
十八 项目绩效域 价值驱动的项目管理知识体系关注价值的实现,包含了 项目管理原则、绩效域、项目生命周期、过程组、10 大知识领域和价值交付系统。在整个生命周期过程中,项目管理者需要始终坚持项目管理原则,通过涵盖 10 大知识领域的项目管…...
macOS安装java
一、下载 官网Java Downloads | Oracle 安装载java8,下载对应的JDK Java Downloads | Oracle 二、双击安装 安装 完成 三、查看安装位置 打开终端窗口,执行命令: /usr/libexec/java_home -V /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Content…...
wpf ScaleTransform
在WPF中,ScaleTransform是用于实现元素缩放的核心类,属于System.Windows.Media命名空间下的变换类型。以下是其主要特性与使用方式的总结: 核心属性 缩放比例 ScaleX:水平方向缩放比例(默认1.0,即…...
开源分享!! 4款免费的数据库在线工具
无论是开发企业网站、搭建电商系统,还是做复杂的应用开发,数据库管理都是绕不开的核心环节。你是否遇到过这些问题: 在本地装了一堆数据库工具,来回切换麻烦又低效?想调试 SQL 语句,还要先配置各种环境&am…...
Mybatis-plus 主键自增值与数据库主键自增值不一致
数据库表的自增值为 100 但是在 java 项目中向数据库插入一天数据后报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property id of class com.wf.dao.pojo.Article with…...
数据清洗到底在清洗什么?
在大数据时代,数据是每个企业的五星资产,被誉为“新石油”,但未经处理的数据往往参杂着大量“杂质”。这些“脏数据”不仅影响分析结果,严重的甚至误导企业决策。数据清洗作为数据预处理的关键环节,正是通过“去芜存菁…...
shell编程之正则表达式
目录 1,正则表达式的定义 2,正则表达式用途 正则表达式的常用选项及示例(grep为例): sed基本语法及常用选项: awk的基本语句及常用选项: 扩展正则表达式(egrep) 元字符总结: …...
每日一题-力扣-2537. 统计好子数组的数目 0416
LeetCode 2537. 统计好子数组的数目 问题描述 给定一个整数数组nums和一个整数k,定义"好子数组"为包含至少k对相等元素的子数组。任务是计算数组中所有"好子数组"的数量。 两个相等的元素构成一对,例如数组[1,1,1]中有3对(1,1)&am…...
遨游防爆手机:构筑煤矿安全通讯的数字护盾
在煤炭、石油、化工等危险作业场景中,安全生产始终是企业发展的生命线。面对复杂多变的生产环境,传统的通讯设备已难以满足现代工业对安全性、可靠性和智能化的严苛要求。遨游通讯作为国内领先的防爆通讯设备制造商,凭借其核心科技自主研发的…...
进程通信详解
进程间通信(IPC)详解:原理、方式与使用场景全解析 摘要 进程间通信(IPC)是操作系统中用于实现多个独立进程之间数据交换和资源协作的重要机制。本文系统地讲解了 IPC 的基本概念、设计目标和系统实现原理,…...
《What Are Step-Level Reward Models Rewarding?》全文翻译
《What Are Step-Level Reward Models Rewarding?Counterintuitive Findings from MCTS-Boosted Mathematical Reasoning》 Step-Level奖励模型到底奖励了什么?来自基于MCTS提升的数学推理的反直觉发现 摘要 Step-level奖励模型(SRMs)通过…...
windows使用docker-desktop安装milvus和可视化工具attu
这里写目录标题 docker-desktop安装docker安装milvusdocker安装milvus可视化工具attu注意点 docker-desktop安装 参考:Windows Docker 安装 docker安装milvus 参考:添加链接描述在 Docker 中运行 Milvus(Windows) docker安装m…...