学习C++、QT---12(C++的继承、权限对继承的影响)

每日一言

        你的价值,由你自己定义,无需他人评判。

 

C++的继承

直接上案例

继承是什么意思呢,就是我本来这个类我叫他基类、我希望创建我的下一个类有我这之前的类的属性和方法,那么我如果不用继承的话,就需要多写很多一样的代码,那么就是不好,不性感,那么这边有个叫做继承的概念,可以让我们新创建的类去继承我们的之前的类,而且现在新创建的类不写之前的类的属性和方法,我们也可以进行使用,当做自己写了这些属性和方法,那么我们也可以添加新的属性和方法,这个就叫做继承

我们称之前的那个被继承的类叫做父类、基类,新的那个类叫做子类、派生类

我们这边用了一个案例  一个叫做手机类 一个叫做苹果这个类

那么很明显手机类是父类,苹果类是子类,那么我们的手机类中的属性,我们的子类也可以用,怎么继承呢??用什么符号?我们写子类的时候这样写

我们一般写写类不是就是这样写的吗 class phone{}这就结束了。但是我们是要作为子类去继承父类的所以我们要加上 :

这个public是什么意思呢,就是说我们的子类要是想用父类的属性或者方法,即使父类那边写了public都不行,也会变成private ,所以我们就需要自己加上public,这样我们就可以随心所欲调用父类的属性和方法了,

像我们main函数里面就是子类调用的父类的属性name  ,但是我们子类并没有写这个属性,所以这个就是继承的好处,不仅仅是省去了代码,提高了代码的复用,还有很多其他的好处在未来我们玩更大的项目的时候就可以体会的到了

分文件优化继承

这个是什么操作呢?是不是和我们在c51的时候之前学的分文件优化代码很像,确实很像啊,就是为了不让我们的代码那么多,又臭又长,那么我们要进行分文件处理,就是本来300行的代码,什么鬼都有,类的声明和实现也在,什么都有,现在我将它们单独分在一个文件里面,这样不就好了吗,这个就是分文件优化代码的意义。

那么开始吧!!!

事先说好哈我们要继承父类嘛,所以我提前用以下的方法创建了一个类叫做Animal

步骤1,右键项目

选择C++class

输入Dog(子类名)

这个Base class就是继承的意思,然后我们目前的话可以自己写上去如下图的Animal

创建文件后会自动跳到dog.h文件发现不认识Animal,因为要包含animal.h这个头文件,我们这个创建的Dog类的话,会生成dog.cpp和dog.h文件

添加后,我们也把函数的声明写出来,那么此时我们不是需要将函数的实现写出来吗,哪里写在dog.cpp也就是该类的cpp文件里面写,这边有个快捷的方法,就是右键我们的函数,就是右键我们写好的 dogShout()这个函数,里面有个Refactor(重构)的里面有个在dog.cpp中添加定义

那么就来到了我这张图

我们将函数进行实现

实现完之后我们来到mian.c文件,这边就是我们的主战场了,和我们之前的是一个意思,我们创建Dog的实例化对象,会发现不认识Dog,那么我们就知道需要添加dog.h头文件了

然后我们就实现了

这个就是我们的分文件优化继承,

权限对继承的影响

主要是记住这张图权限对继承的影响图,

我抛出代码我进行讲解

这个就是我进行测试的代码了,什么意思呢

  1. 我在基类中创建了public、protected、private属性的变量

好的现在我创建了一个名为TestClass的子类去使用private属性去继承父类,

那么此时我们要知道,我们使用任何属性继承父类后,父类中的属性都有可能会被降级,降级什么意思呢就是父类的public属性的成员变量,会变成protected属性的成员变量,或者是其他的降级

因此我们就要进行判断权限的变化

好的,我们这边使用private属性去继承父类,那么父类中的public属性的变量会变成private  protected属性的变量会变成private ,然后private属性的话本来就不能被继承,要说降级的话可以是说降级到不可访问

那么我们就可以根据权限变完后的的权限等级我们去看这张表,看一下有那些数据我们可以如何去调用,比如有些只能在类内部被调用,有些类外部可以被调用,等等

我们结合案例,我们这边,进行private继承后会发现,父类的public权限的变量和protected权限的变量都降级成了private,那么我们根据上面那张表可以知道,此时只有类内部可以调用private权限的变量,所以我们这个price可以被调用,不会报错,当然protectedData=10;这个protect权限的变量也不会报错,也是可以的调用的

看我们也在类的外部创建了一个对象来进行调用price,那么肯定是不行的,因为我们可以根据那张表来看,类外部是不允许调用protected权限的变量的

其实其他的也都是这样子来判断,主要就是结合我们的这两张表来进行判断,要熟记于心噢,这边我只用一个来解释,其他两个子类的调用的操作,得出报错还是不报错,也是这样去了解的

总结来说:子类用不同的权限去继承父类,那么父类中的权限属性变量 会发生降级的影响,也就是权限会变低,我们俗称权限的高低由public->protected->private依次降级。

那么我们根据变化后的权限要知道,我们在不同的区域块(类内部、同一个类的对象、子类、类外部),对这些权限的变量的调用许可,做到这一点就行了

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

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

相关文章

(6)Wireshark的TCP包详解-上篇

1.简介 上一篇中通过介绍和讲解,应该知道要讲解和介绍的内容在哪里了吧,没错就是介绍OSI七层模型的传输层。因为只有它建立主机端到端的连接如:TCP、UDP。 2.TCP是什么? tcp是工作在传输层,也就是网络层上一层的协议。 它是面…

太极八卦罗盘JS绘制

LeaferJS 是一款好用的 Canvas 引擎,通过LeaferJS绘制罗盘案例. https://www.leaferjs.com/ui/guide/ 示例 太极八卦罗盘 直接上代码 <template><div id"LuoPan"></div><div id"info"><p>屏幕宽度: {{ screenWidth }}px<…

Python开源项目月排行 2025年5月

#2025年5月2025年6月1日1scrapy一个开源的、基于 Python 的高性能网络爬虫和数据抓取框架。Scrapy 项目最初由伦敦的网络聚合和电子商务公司 Mydeco 的员工以及乌拉圭蒙得维的亚的网络咨询公司 Insophia 的开发者共同创建。目前&#xff0c;Scrapy 由 Zyte&#xff08;原名 Scr…

Debezium日常分享系列之:在 Kubernetes 中使用 Debezium 的 CDC

Debezium日常分享系列之&#xff1a;在 Kubernetes 中使用 Debezium 的 CDC 架构源数据库创建数据库凭证密钥Debezium 自定义镜像构建并推送镜像Kafka Connect 集群Debezium Postgres 连接器Debezium 创建的 Kafka 主题 Debezium 是一个开源的分布式变更数据捕获 (CDC) 平台。D…

tf serving和torch serve哪个耗时更低

TensorFlow Serving&#xff08;TF Serving&#xff09;和 TorchServe 的耗时对比需结合具体场景&#xff08;如硬件配置、模型类型、优化策略等&#xff09;&#xff0c;以下从多维度分析两者的性能差异及适用场景。 ⏱️ 1. 标准性能基准对比 根据公开压测数据&#xff08;…

Java面试宝典:基础六

133. 二进制小数点位移 答案:C(乘以2) 解析: 原理:二进制小数点右移一位等价于乘以 (2^1)(左移则除以 (2))。示例: 101.1(5.5)右移 → 1011(11)验证:(5.5 \times 2 = 11)说明:位移前:1 0 1 . 1 (值 = 2+2⁰+2⁻ = 5.5) 位移后:1 0 1 1 . (值 = 2+2+2⁰ =…

04-React中绑定this并给函数传参的几种方式

前言绑定 this 的方式一&#xff1a;bind()绑定 this 并给函数传参 的方式二&#xff1a;构造函数里设置 bind()绑定 this 并给函数传参 的方式三&#xff1a;箭头函数【荐】 前言 我们先来看下面这段代码&#xff1a; components/MyComponent.jsx import React from "…

Docker拉取不兼容的镜像解决办法

错误提示如下&#xff1a; WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested295ef35cfefe0dce6904e017e89218695d9a9c092b45496218f4476357be4f9c 这个警告表明你…

android14 未充电状态电量低于15%弹框提示 10%直接关机

上层接收电量变化广播&#xff0c;添加未充电判断&#xff0c;做出弹框或关机动作 SystemUI\src\com\android\systemui\power\PowerUI.java Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();if (PowerManager.ACTION_POWE…

ASP.NET Core 中 Kestrel 的应用及在前后端分离项目中的角色

目录 一、Kestrel 基础&#xff1a;轻量级且高性能的 Web 服务器 二、前后端分离项目架构&#xff1a;Vue、.NET Core API、Nginx 与 Kestrel 2.1 交互流程图 2.2 流程详解 三、Kestrel 在架构中的核心作用 四、launchSettings.json 与 Kestrel 配置的关系及底层机制 4.1…

Kotlin 退出循环总结

文章目录 Kotlin 退出循环总结for循环forEach()嵌套for循环lambda函数inline函数 Kotlin 退出循环总结 for循环 for ((index, value) in list.withIndex()) {if (value "c") {break // 退出循环}println("$index - $value") }// 0 - a // 1 - bfo…

再看C语言

目录 与Java的差异化 编程范式 跨平台 编译过程 包管理 基本类型 内存结构 重点掌握 进制、字节与计算 指针 结构体 关键词 动态内存 模块化 高级特性 动态链接 虚拟内存 打包编译 并发编程 现在需要参与到存储软件开发工作&#xff0c;存储层比较接近OS系统…

机器学习入门 | 训练、推理与其他机器学习活动(预处理、测试与评估)

在训练阶段&#xff0c;训练算法通过优化目标/损失函数在训练数据集上的表现&#xff0c;不断更新模型参数θ。在监督学习场景中&#xff0c;训练数据集由输入-标签对&#xff08;真实输出值&#xff09;组成。目标函数应当奖励模型根据训练输入成功预测真实输出的行为&#xf…

Node.js特训专栏-实战进阶:11. Redis缓存策略与应用场景

&#x1f525; 欢迎来到 Node.js 实战专栏&#xff01;在这里&#xff0c;每一行代码都是解锁高性能应用的钥匙&#xff0c;让我们一起开启 Node.js 的奇妙开发之旅&#xff01; Node.js 特训专栏主页 专栏内容规划详情 Redis 缓存策略与应用场景&#xff1a;从理论到实战的高…

【stm32】HAL库开发——Cube配置基本定时器

目录 一、Cube配置基本定时器 1.定时器CubeMX配置介绍 2.定时器中断控制LED 3.定时器常用函数 4.定时器从模式&#xff08;Reset Mode&#xff09; 5.定时器的从模式&#xff08;Gated Mode&#xff09; 6.定时器的编码器接口 一、Cube配置基本定时器 1.定时器CubeMX配置…

nginx反向代理后端服务restful及token处理

#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; } #代理mysql服务 stream {upstream mysql_backend {server 192.168…

正确理解Cola StateMachine不内置事务管理机制

✅ 正确理解&#xff1a;Cola StateMachine 并非“不支持”事务一致性&#xff0c;而是“不内置”事务管理机制 因为&#xff1a; Cola StateMachine 是轻量级、无状态、不依赖 Spring 的框架&#xff0c;它本身 不绑定任何事务上下文。它不像 Spring StateMachine 那样自动与…

AudioTrack使用

** AudioTrack ** AudioTrack 是 Android 音频系统中的核心类&#xff0c;用于播放原始音频数据&#xff08;PCM&#xff09;或压缩音频&#xff08;如 MP3、AAC&#xff09;。它提供了低级别的音频播放控制&#xff0c;适合需要精细管理的场景&#xff08;如游戏音效、实时音…

解密:MySQL 的常见存储引擎

在数据库领域&#xff0c;MySQL 作为一款广受欢迎的关系型数据库管理系统&#xff0c;提供了多种存储引擎以满足不同应用场景的需求。每种存储引擎都有其独特的特性、优势和适用场景。本文将深入探讨 MySQL 中几种常见的存储引擎&#xff0c;包括 InnoDB、MyISAM、MEMORY 和 AR…

qt和qtcreator版本关系

实例展示&#xff1a; 如图所示的qtcreator是使用qt5.15安装过程选择勾选了qtcreator 14.0.2&#xff0c;安装完成qtcreator版本信息&#xff1a; 安装过程中选择了这些构件kits&#xff0c;会自动识别到&#xff1a; 使用qt5.9.9另外安装的kits&#xff0c;需要手动设置才能识…