4.1派生类的概念

news2024/11/24 14:23:49


为什么使用继承

所谓继承就是从先辈处得到属性和行为特征。类的继承就是新的类从已有类那里得到已有特征。这样做的目的是:减少代码的重复。

派生类的声明

声明派生类的一般公式 :

class 派生类名:[继承方式] 基类名

{

        派生类新增的数据成员和成员函数;

}

“基类名”是已经声明的类的名称,“派生类名”是继承原有类的特征而生成的新类的名称。

继承方式有三种:

如果不显示地给出继承方式关键字,系统默认为私有继承(private)。类的继承方式指定了派生类成员以及类对象对于从基类继承来的成员的访问权限。

派生类的构成 

1)派生类从基类接受成员

在C++类的继承中,派生类把基类的全部成员(除构造函数和析构函数之外)接收过来。

2)派生类不能对接受基类的成员进行选择,但是可以对这些成员进行某些调整。

调整包括两个方面:

一.一方面是改变基类成员在派生类中的访问属性,这主要是通过派生类声明时的继承方式来控制的。

二.另一方面是派生类可以对基类的成员进行重定义,即在派生类中声明一个与基类成员同名的成员,则派生类中的新成员会覆盖基类的同名成员,这时在派生类中或通过派生类对象,直接使用成员名就只能访问到派生类声明的同名成员。重定义也支持重载。

3)在派生类中增加新的成员。

在派生类中增加新的成员体现了派生类对基类功能的扩展,是继承和派生机制的核心。

由于在继承过程中,基类的构造函数和析构函数是不能被继承的,因此在声明派生类时,一般需要在派生类中定义新的构造函数和析构函数。

基类成员在派生类中的访问属性

派生类可以继承基类中除了构造函数与析构函数之外的成员,但是这些成员的访问属性在派生过程中是可以调整的。从基类继承来的成员在派生类中的访问属性是由继承方式控制的。

类的继承方式有三种,公有,私有,保护。

1)基类中的私有成员。

无论哪种继承方式,基类中的私有成员不允许派生类继承,即在派生类中是不可直接访问的。

2)基类中的公有成员。

当继承方式为公有(public)继承时,基类中的所有公有成员在派生类中仍以公有成员的身份出现。

当继承方式为私有(private)继承时,基类中的所有公有成员在派生类中都以私有成员的身份出现。

当继承方式为保护(protected)继承时,基类中所有公有成员在派生类中都以保护成员的身份出现。

3)基类中的保护成员。

当继承方式为公有继承时,基类中所有保护成员在派生类中仍以保护成员的身份出现。

当继承方式为私有继承时,基类中所有保护成员在派生类中以私有成员的身份出现。

当继承方式为保护继承时,基类中所有保护成员在派生类中仍以保护成员的身份出现。

所以我们声明派生类的继承方式,一般为公有继承,公有继承不改变基类成员在派生类中的访问属性。

派生类对基类成员的访问规则

派生类对基类成员的访问形式主要有以下两种:

1)内部访问。由派生类中新增的成员函数对基类继承来成员访问。

2)对象访问。在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

一、私有继承的访问规则

经过了私有继承之后,所有基类的成员都成为了派生类的私有成员或者不可访问成员,如果进一步派生的话,基类的全部成员都无法在新的派生类中被访问。因此,私有继承之后,基类的成员无法在以后的派生类中再发挥作用,实际是中止基类在之后继续派生,这种情况比较少。

二、公有继承的访问规则

当类继承方式为公有继承时,基类的公有成员被继承到派生类仍作为公有成员,派生类的公有成员可以直接访问它们,在类的外部,可以通过派生类的对象访问。

公有继承时,基类的保护成员被继承到派生类中,仍未保护成员,可以在类内通过成员函数访问,派生类的派生类也可以访问它,可以继续派生,但是我们派生类的对象不能直接访问基类中继承的保护成员,因为保护成员只能由类内和派生类访问。

公有继承时,基类的私有成员不允许派生类继承,无论是派生类的成员函数还是派生类的对象都不能直接访问到基类的私有成员。

强调:

不要以为公有继承就能访问到基类的私有成员了。私有成员是不能被继承到的。

保护继承的访问规则

当类的继承方式为保护继承时,基类的公有成员和保护成员被继承到派生类中都是保护成员,派生类的其他成员可以访问它们,但是派生类的对象,不能直接在类外访问保护成员。基类的私有不允许被继承,在保护继承方式中也一样。

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

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

相关文章

Java并发基石_CAS原理实战02_CAS实现原理

文章目录什么是CAS?CAS的实现原理是什么?cmpxchg指令怎么保证多核心下的线程安全?什么是ABA问题?如何解决ABA问题呢?什么是CAS? CAS,全称CompareAndSwap,比较并替换。 CAS包含了三个…

MyBatis --- 缓存、逆向工程、分页插件

一、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1、…

MySQL高级第十二篇:数据库事物概述和隔离级别

MySQL高级第十二篇:数据库事物概述和隔离级别一、数据库事物概述1. SHOW ENGINES 查看存储引擎2. 事物ACID特性原子性(atomiity)一致性(consistency):隔离性(isolation)持久性&#…

使用java实现自动扫雷

写在前面 本项目已在github开源,链接https://github.com/QZero233/JavaAutoMinesweeper 本文的写作风格可能会有些奇怪,这是笔者的一次全新的尝试,后续会换回写blog的文风的 摘要 本文提出了一个全自动完成扫雷游戏的解决方案,…

【Kubernetes】 多云管理策略解析

文章目录Kubernetes 多云的实现1. 前言1.1 Kubernetes 多云的现实需求2. Kubernetes 多云的架构设计2.1 跨云 Kubernetes 的挑战2.1.1 不同云厂商的接口不兼容2.1.2 多云环境中的安全问题2.1.3 跨云环境中的网络问题2.2 Kubernetes 多云的架构设计2.2.1 统一网络管理2.2.2 使用…

新能源汽车高压配电管理(PDU/BDU)

一、概念与组成 PDU(Power Distribution Unit),即高压配电单元,功能是负责新能源车高压系统中的电源分配与管理,为整车提供充放电控制、高压部件上电控制、电路过载短路保护、高压采样、低压控制等功能,保护和监控高压系统的运行…

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法

错误场景 最近在开发React的前端微应用,启动时模块构建报错Module build failed, Error: EMFILE: too many open files, 如下图所示: Error: EMFILE: too many open files的错误,经排查是因为单个微应用项目较大,发…

【Linux安装数据库】Ubuntu安装mysql并连接navicat

Linux系统部署Django项目 文章目录Linux系统部署Django项目一、mysql安装二、mysql配置文件三、新建数据库和用户四、nivacat链接mysql一、mysql安装 linux安装mysql数据库有很多教程,根据安装方式不同,相关的步骤也不同。可以参考:【Linux安…

前端基础(HTML、CSS、JS、jQuery)

文章目录一、HTML基础1.1 常用标签(表格、表单、按钮等)1.2 其他一些标签(书签、显示效果、缩写等)二、CSS基础2.1 CSS引入方式2.2 CSS选择器2.3 CSS常用属性三、JavaScript3.1 JS使用方式3.2 变量和数据类型3.3 函数、作用域、条…

Unity基础框架从0到1(五)延时任务调度模块

索引 这是Unity基础框架从0到1的第五篇文章,前面的文章和对应的视频我一起列到这里: 文章 Unity基础框架从0到1 开篇 Unity游戏框架从0到1 (二) 单例模块 Unity基础框架从0到1(三)高效的全局消息系统 Unity基础框架从0到1&a…

CentOS 7 DNS服务器架设

CentOS 7 DNS服务器部署 项目背景和要求 要保证即能够解析内网域名linuxidc.local的解析,又能解析互联网的域名。 主DNS服务器:ZZYH1.LINUXIDC.LOCAL 辅助DNS服务器:ZZYH2.LINUXIDC.LOCAL 包含以下域的信息: 1、linuxidc.lo…

mybatis多表联查(一对一、一对多/多对一、多对多)

mybatis多表联查(一对一、一对多/多对一、多对多) 在开发过程中单表查询往往不能满足需求分析的很多功能,对于比较复杂业务来说,关联的表有几个,甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务,就必须进…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC),集中了 Java 并发的各种工具类, 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器,初始化的时候 传入需要计数的线程等待数…

Monaco Editor编辑器教程(二七):集成多个GitLab编辑器颜色样式主题

前言 在开发编辑器时,未来满足开发者的审美需求,有时需要设计多套颜色主题,最基础的是黑色主题和白色主题。如果用户愿意出钱的话,可以加上一些其他花里胡哨的颜色主题,在vscode中是可以搜到。今天就来教大家一些,如何借助现成的资源来为自己的monaco编辑器增加丰富的颜…

JavaScript控制语句及搭建前端服务器

目录 一、for in 二、for of 三、try catch 四、搭建前端服务器 (1)安装nvm (2)检查npm (3)搭建前端服务器 一、for in 主要用来遍历对象 let father {name:张三, age:18, study:function(){}};f…

Linux常用的网络命令有哪些?快速入门!

在Linux系统中,有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能,并且可以快速诊断和解决网络问题。在本文中,我们将介绍一些常用的Linux网络命令,并提供一些案例来帮助您更好地理…

高数基础2

目录 函数的极限: 自变量趋向于有限值时函数的极限 左右极限 需要分左右极限的三种问题: 例题: 极限性质: 函数的保号性: 函数的保号性: 例题: 极限值与无穷小的关系 极限存在准则&#…

FRRoute 路由信息采集 + MPLS VPN隧道信息采集与识别

FRRoute 路由信息采集 MPLS VPN隧道信息采集与识别FRRoute数据库-表路由信息采集命令输出字段 -> 映射到 -> 数据库字段数据结构 算法show int brroute -nshow interfaces loMPLS VPN隧道信息采集与识别step 1 : 采集mpls邻居表step 2 : MPLS 隧道识别FRRoute 数据库-…

RK3568平台开发系列讲解(Linux系统篇)线程 pthread 详解

🚀返回专栏总目录 文章目录 一、POSIX 线程模型二、pthread_create()创建线程三、线程属性3.1、初始化线程对象属性3.2、销毁一个线程属性对象3.3、线程的分离状态3.4、线程的调度策略3.5、线程的优先级3.6、线程栈四、线程退出五、回收已终止线程的资源沉淀、分享、成长,让…

Word处理控件Aspose.Words功能演示:使用C#创建MS Word文档

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…