C++从零开始的打怪升级之路(day40)

这是关于一个普通双非本科大一学生的C++的学习记录贴

在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料

那么开启正题

今天分享的是关于继承的知识点

1.继承的概念及定义

1.1继承的概念

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生的新的类叫做派生类。继承呈现了面向对象程序组设计的层次结构,体现了由简单到复杂的认识过程。以前我们接触到的复用都是函数复用,继承是类设计层次的复用

1.2继承的定义

1.2.1定义格式

我们来看下面的代码

class Person
{
public:int _age;
};class Student : public Person
{
public:int _stuid;
};

这段代码中Student就是派生类(子类),public就是继承方式,Person就是基类(父类)

1.2.2继承关系和访问限定符

在学习封装时候我们了解到访问限定符有三种

public访问,protected访问,private访问

与此对应的,继承方式也有三种

public继承,protected访问,private访问

1.2.3继承父类成员访问方式的变化

以前我们说protected(保护)和private(私有)暂时没有区别,而在继承这里就体现出来了区别

在public继承下,子类中,父类的private成员是无法访问的,而protected成员是可以访问的

不同的继承方式与不同的访问限定符,会是子类对父类的访问不一样,下面我们给出规律

父类的private成员在子类中无论以任何方式继承都是无法访问的

对于其他的,我们有下面的公式

父类成员在子类中的访问方式 == Min(成员在父类中的访问限定符,继承方式)

(public < protected < private)

注意:
1. 使用关键字class时默认继承方式是private,使用struct时默认继承方式时public,不过最好显式给出继承方式

2.实际运用中一般都是public继承,几乎很少有其他两种继承出现,我们也不提倡(维护性不强)

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

1.子类对象可以赋值给父类的对象 / 父类的指针 / 父类的引用。(我们叫切割或者切片)

2.父类对象不能赋值给子类对象

class Person
{
protected:int _age = 10;
};class Student : public Person
{
public:int _stuid;
};void Test1()
{Student s;// 1.子类对象可以赋值给父类的对象 / 父类的指针 / 父类的引用。// (我们叫切割或者切片)Person p = s;Person* pp = &s;Person& rp = s;// 2.父类对象不能赋值给子类对象s = p;(err) 
}

3.继承中的作用域

1.在继承体系中父类和子类都有独自的作用域

2.父类和子类有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫做隐藏(也叫做重定义)

3.如果是成员函数的隐藏,只要是函数名相同就构成隐藏

4.实际中继承体系里,最好不要定义同名成员

class A
{
public:void Func(int i = 10){cout << "A::Func(int)" << endl;}void Func(char ch = 'a'){cout << "A::Func(char)" << endl;}
};class B : public A
{
public:void Func(int i){cout << "B::Func()" << endl;}
};void Test2()
{A a;B b;a.Func(1);a.Func('a');b.Func(1);
}

 上面的几个Func分别构成重构和隐藏

 新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!

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

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

相关文章

JDK时间

Date 全世界的时间&#xff0c;有一个统一的计算标准。 世界标准时间&#xff1a;格林尼治时间/格林威治时间简称GMT&#xff0c;目前时间标准时间已经替换为&#xff1a;原子钟。 中国标准时间&#xff1a;世界时间8 时间换算单位&#xff1a; 一秒等于一千毫秒 一毫秒等于一…

CDC作业历史记录无法删除问题

背景 数据库开启CDC功能后&#xff0c;每天会生成大量的历史记录&#xff0c;即使达到参数“每个作业的最大历史记录“的阈值后也不会被删除&#xff0c;导致其它作业的历史记录被删除&#xff0c;无法查看以前的执行情况&#xff0c;非常不方便。 现象 数据库开启CDC后会创建…

【MATLAB源码-第147期】基于matlab的QPSK调制解调在AWGN信道,瑞利信道,莱斯信道理论与实际误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 四相位移键控&#xff08;QPSK&#xff0c;Quadrature Phase Shift Keying&#xff09;是一种重要的数字调制技术&#xff0c;它通过改变信号的相位来传输数据。与其他调制技术相比&#xff0c;QPSK在相同的带宽条件下能够传…

Linux命名管道

Linux匿名管道-CSDN博客 目录 1.原理 2.接口实现 3.模拟日志 Linux匿名管道-CSDN博客 这上面叫的是匿名管道&#xff0c;不要将两者搞混&#xff0c;匿名管道说的是两个有血缘关系的进程相互通信&#xff0c;但是命名管道就是两个没有关系的管道相互通信。 1.原理 和匿名…

高斯扩散过程

高斯扩散过程是一种数学模型&#xff0c;用于描述某些随机现象的时间演化&#xff0c;其中这些现象的概率密度函数&#xff08;PDF&#xff09;符合高斯分布&#xff0c;也称为正态分布。在物理和工程学领域&#xff0c;此类过程通常被用来描述热扩散、粒子扩散、概率密度演变等…

springboot/ssm公司资产网站Java企业资产统计管理系统web

springboot/ssm公司资产网站Java企业资产统计管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysq…

蓝桥杯刷题--python-16

562. 壁画 - AcWing题库 T=int(input()) j=1 while(j<=T): N = int(input()) a=input() s = [0]*(N+1) # 求前戳和 for i in range(1, N + 1): s[i] = int(a[i-1]) + s[i - 1] # 枚举 # 区间 max_ = float(-inf) k = (N + 2 - …

编译链接实战(25)ThreadSanitizer检测线程安全

ThreadSanitizer&#xff08;又称为TSan&#xff09;是一个用于C/C的数据竞争检测器。在并发系统中&#xff0c;数据竞争是最常见且最难调试的错误类型之一。当两个线程并发访问同一个变量&#xff0c;并且至少有一个访问是写操作时&#xff0c;就会发生数据竞争。C11标准正式将…

【电路笔记】--RC网络-RC微分器

RC微分器 文章目录 RC微分器1、概述2、RC微分器电路3、单脉冲 RC 微分器4、RC 微分器示例5、总结无源 RC 微分器是一个串联 RC 网络,可产生与微分数学过程相对应的输出信号。 1、概述 无源 RC 微分器只不过是与电阻串联的电容,这是一种与频率相关的器件,其电抗与固定电阻串…

前端实现浏览器打印

浏览器的print方法直接调用会打印当前页面的所有元素&#xff0c;使用iframe可以实现局部打印所需要的模块。 组件printView&#xff0c;将传入的信息放入iframe中&#xff0c;调用浏览器的打印功能 <template><div class"print"><iframeid"if…

马斯克指控OpenAI违背成立协议,要求恢复开源;Automattic否认向AI公司出售用户数据

&#x1f989; AI新闻 &#x1f680; 马斯克指控OpenAI违背成立协议&#xff0c;要求恢复开源 摘要&#xff1a;马斯克近日在旧金山高等法院对OpenAI及其CEO阿尔特曼提起诉讼&#xff0c;指控他们违反最初促进AI技术造福人类非营利方向的成立协议。马斯克声称&#xff0c;Ope…

Linux命令-clear命令(清除当前屏幕终端上的任何信息)

说明 clear命令 用于清除当前屏幕终端上的任何信息。 语法 clear示例 直接输入clear命令当前终端上的任何信息就可被清除。

【JavaSE】时间类相关API以及使用

目录 时间类相关API 1.Date类 2.SimpleDateFormat类 3.Calendar类 4.JDK8-时区&#xff0c;时间和格式化 5.JDK8-日历和工具类 时间类相关API 以下内容是通过观看黑马java的常见API视频总结加笔记&#xff0c;其中有JDK7以及以前的时间类&#xff0c;包括&#xff1a;Date&…

我在代码随想录|写代码Day30 | 贪心算法 | 435. 无重叠区间,763.划分字母区间, 56. 合并区间, 738.单调递增的数字

&#x1f525;博客介绍&#xff1a; 27dCnc &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: <<数据结构与算法>> 专题 : 数据结构帮助小白快速入门算法 &…

[HackMyVM]靶场 VivifyTech

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Unk…

matlab阶段学习小节1

数组排序 fliplr()实现数组倒序&#xff0c;但不对大小进行排序&#xff0c;只是元素位置掉头。 要想实现大小倒序排列&#xff0c;可以先sort()实现正序排列&#xff0c;再用fliplr倒一下 %数组运算 %矩阵 %xAb的解xb/A;(矩阵) %右除运算A/B&#xff0c;左矩阵为被除数&a…

多态——细致讲解

&#x1f536;多态基础概念  &#x1f536;概念   &#x1f531;多态性   &#x1f531;多态——重新(覆盖)  &#x1f536;示例   &#x1f536;基本使用方法   &#x1f536;特例    &#x1f531;协变    &#x1f531;析构函数重写  &#x1f531;多态原理…

`useState` 和 `useImmer` 都是 React 中用于管理状态的钩子

useImmer如何使用&#xff1a; 安装&#xff1a;yarn add use-immer使用&#xff1a; const [data, updateData] useImmer({fields: [], });updateData((draft) > {draft.fields.splice(index, 1, {id:1});});useState 和 useImmer 都是 React 中用于管理状态的钩子&…

redis实战笔记汇总

文章目录 1 NoSQL入门概述1.1 能干嘛&#xff1f;1.2 传统RDBMS VS NOSQL1.3 NoSQL数据库的四大分类1.4 分布式数据库CAP原理 BASE原则1.5 分布式集群简介1.6 淘宝商品信息的存储方案 2 Redis入门概述2.1 是什么&#xff1f;2.2 能干嘛&#xff1f;2.3 怎么玩&#xff1f;核心…

46、WEB攻防——通用漏洞PHP反序列化原生类漏洞绕过公私有属性

文章目录 几种常用的魔术方法1、__destruct()2、__tostring()3、__call()4、__get()5、__set()6、__sleep()7、__wakeup()8、__isset()9、__unset()9、__invoke() 三种变量属性极客2019 PHPphp原生类 几种常用的魔术方法 1、__destruct() 当删除一个对象或对象操作终止时被调…