C++ 派生类的引入与特性

一 继承与派生

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面的例子可以看出:
继承:一旦指定了某种事物父代的本质特征,那么它的子代将会自动具有哪些性质。这就是一种朴素的可重用的概念。
派生:而且子代可以拥有父代没有的特性,这是可扩充的概念。

1 C++ 的继承关系

继承就是在一个已经存在的类的基础上建立另一个新的类。
已存在的类称为“基类”或“父类”,新建立的类称为“派生类”或“子类”。如图所示:
在这里插入图片描述
在这里插入图片描述

2 派生类的特性

派生类的功能主要通过以下方式来体现:
洗手基类成员;
改造基类成员;
添加新成员;
从编码的角度来看,派生类重基类中比较低的代价换来较大的灵活性:
派生类可以对继承的属性进行扩展、限制或改变。
一旦产生了可靠的基类,只需要调试派生类中所做的修改即可。

二 继承方式:单继承

1 单继承和多继承

单继承:派生类只有一个直接基类。
多继承:派生类有多个直接基类。
在这里插入图片描述

2 单继承派生类

定义单继承派生类的语法格式:
class 派生类名:<继承方式>基类名{
…//派生修饰基类的成员
public private protected
};
虽然继承了基类的所有成员,但是派生类并非都能访问基类的所有成员,继承方式会影响派生类对基类中各种成员的使用。

回顾类成员的访问方式也有public、private、protected分别是什么意思?
和我们这里基础方式的public、private、protected有区别吗?
在这里插入图片描述
公有派生类
class派生类名:public基类名{
…//派生类新添加的成员
};
基类的成员在公有派生类中引用权限
在这里插入图片描述
不可访问成员
在类外补能被直接访问。
在派生类的类内部能被直接访问。

3私有派生类

class派生类名:private基类名{
…//派生类新添加的成员
};
基类的成员在私有派生类中引用权限。
在这里插入图片描述

4 公有派生和私有派生的比较

在这里插入图片描述
虽然派生类继承了基类所有的成员,但是对于派生类来说,基类的私有成员时不可见的,因此不能被派生类所访问。

5 保护成员的引入

为了解决这个问题,C++专门设置了保护成员,即用protected关键字说明的成员。
保护成员的特性:
能够被基类和派生类所访问。
和私有成员一样,类外不能访问。

6 保护派生类

class派生类名:protected基类名{
…//派生类新添加的成员
};
基类的成员在保护派生类中引用权限
在这里插入图片描述

7 小结

不同的继承方式,子类对基类中的成员的访问权限如下表所示:
在这里插入图片描述

三 派生类与基类同名成员的访问方式

1 派生类与基类同名成员的访问方式

C++允许派生类可以重新定义基类的成员,此时称派生类的成员覆盖了基类的同名成员。
如果在派生类中,想使用基类的同名成员,则可以显式地使用类名+限定符的方式,如下所示:
在这里插入图片描述
举例
在这里插入图片描述

四 赋值兼容规则

在公有派生方式下,派生类对象可以作为基类对象来使用,具体方式如下:
派生类的对象可以直接赋值给基类的对象;
基类对象的引用可以引用一个派生类对象;
基类对象的指针可以指向一个派生类对象;

五 单继承的构造与析构

1 单继承派生类的构造函数

派生类构造函数(参数表):基类构造函数(参数表),对象成员1(参数表),…对象成员n(参数表)
{
…//初始化自定义数据成员
}

如果基类使用的是缺省的构造函数或不带参数的构造函数,那么在初始化列表中可以省略“基类构造函数(参数表)”这一项。

2 构造函数和析构调用顺序

构造函数的调用顺序如下:
先调用基类构造函数;
再调用对象成员所属类的构造函数;
最后调用派生类构造函数;

析构函数的调用顺序如下:
先调用派生类的析构函数;
再调用对象成员所属类的析构函数;
最后调用基类的析构函数;
在这里插入图片描述

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

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

相关文章

Today At Apple 2024.04.15 Phone15 入门

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xff1a;Today At Apple Notes果粉加群 &am…

Mybatis进阶详细用法

目录 条件构造器 案例 自定义SQL 案例 Service接口 案例 综合案例 条件构造器 案例 Testvoid testQueryMapper() {// 创建 QueryWrapper 实例QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.select("id," "username,&…

uniapp经验

uniapp-ts模版在前端/vue文件夹下 npx dcloudio/uvmlatest 安装依赖 之后tsconfig.json会报错&#xff0c;可以在tsconfig.json文件中"compilerOptions"配置项内添加"ignoreDeprecations": "5.0"&#xff0c;解决。 ### 编译和运行 uni-app 项目…

Postman基础功能-变量设置与使用

如果你因失去太阳而流泪&#xff0c;那你也将失去群星了。大家好&#xff0c;在 API 测试的广袤世界中&#xff0c;Postman 犹如一座闪耀的灯塔&#xff0c;为我们指引着前行的方向。而其中的全局变量、集合变量和环境变量&#xff0c;更是如同隐藏的宝藏&#xff0c;蕴含着巨大…

以太网网络变压器型号

Hqst华强盛导读&#xff1a;以太网网络变压器的型号通常由一系列数字和字母组成&#xff0c;其中包括以下信息&#xff1a; 额定电压&#xff1a;表示变压器的额定输入和输出电压&#xff0c;通常以伏特&#xff08;V&#xff09;为单位。 额定电流&#xff1a;表示变压器的额定…

0513_IO7

练习1&#xff1a; 使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式&#xff1a; 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctrlc之后&#xff0c;指定的编号不读取&#xff0c;读取…

孩子多大可以接触python?学习python的好处

孩子接触Python的年龄并没有明确的界限&#xff0c;一般来说&#xff0c;6岁以上的孩子可以开始学习Python编程。虽然Python是一门高级编程语言&#xff0c;但它的语法简单易懂&#xff0c;适合初学者入门。通过学习Python编程&#xff0c;孩子可以培养逻辑思维、创造力和解决问…

电商秒杀系统设计

业务流程 系统架构 系统挑战 高并发:秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求 库存同步:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。 防止恶意抢购和…

前端 JS 经典:JS 基础类型和 typeof

前言&#xff1a;JS 基础类型就 8 种&#xff0c;这是官方确定的&#xff0c;毋庸置疑。其中原始类型 7 种&#xff0c;对象类型 1 种。而 typeof 关键字是用来判断数据是属于什么类型的。 1. 原始类型 Number、Boolean、String、BigInt、symbol、Undefined、null typeof 18…

猫头虎分享已解决Error || ERROR: Failed building wheel for XXX

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

python设计模式---观察者模式

观察者模式是一种行为设计模式&#xff0c;用于定义对象之间的一对多依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都会得到通知并自动更新。 from abc import ABC, abstractmethod from typing import Listclass Observable:def __init__(sel…

系统定时器(SysTick)

介绍SysTick SysTick结构框图 时钟选择 计数器部分 中断部分 工作流程 相关寄存器 配置流程 相关库函数

centos无法tab补全至文件

很奇怪的需求&#xff1a;redhat 7.9版本用cd 只能到目录&#xff0c;无法到文件 我个人认为不是个问题&#xff0c;但是甲方需求&#xff0c;你懂的 首先&#xff0c;我们要搞清楚tab补全功能的包bash-completion是否安装&#xff0c;这里肯定是安装了&#xff0c;不过还是看…

使用vscode时快速生成console.log()

前言&#xff1a;在使用vscode开发进行调试时&#xff0c;我们经常要用到console.log()来调试代码&#xff0c;有什么好用的办法来快速生成&#xff0c;答案肯定是有的&#xff0c;下面跟随我来看一下是不是真的很好用。 安装插件JavaScript (ES6) code snippets 使用时直接按照…

Python批量输出图像的尺寸、格式、模式代码

import os from PIL import Image # 原始文件夹路径 original_folder rC:\Users\86182\Desktop\OPENCVyt\yt1 # 遍历原始文件夹中的图像 for filename in os.listdir(original_folder): img Image.open(os.path.join(original_folder, filename)) Size img.size # …

你了解手机设备的dpr吗?它和CSS又有什么联系?

当我们在前端开发中涉及到devicePixelRatio时&#xff0c;我们实际上在谈论屏幕像素密度&#xff0c;即每英寸的像素数。这个属性告诉我们在一个设备上的一个CSS像素对应多少物理像素。 目录 知识点概览 dpr值的计算 dpr的用处 知识点概览 比如我们新买了一个手机&#xff0…

vue vite 环境非构建包编译 React 报错定位

1. 背景 众所周知&#xff0c;vite 在构建生态的位置&#xff0c;vue 与之更是密切&#xff0c;主流的 vue 库几乎都与 vite 捆绑。 但有些 UI 库 如 private/ui 并没进行行编译&#xff0c;而是直接将源码发布到了 npm 中&#xff0c;无法实现兼容化&#xff0c;需要消费方去…

vs-qt中无法加载qsqlite驱动,但是单独新建demo测试却又是正常的。。。

开发环境: Vs2015 + qt5.12 背景: 接手了一个项目,可以编译过去,也可以运行,, 但是登录一直失败,,但是数据库文件也是正常的。。。 最主要的是环境和同事的是一样的,,,但是他那边可以加载成功,我这边不可以。。 后来单独在vs中创建了一个demo,用来测试QSqlData…

Ubuntu虚拟机上推荐一款免费好用的git版本管理工具

工具叫: gitg 软件界面如下&#xff1a; FR:徐海涛(hunkxu)

开眼了,自动化测试还能这样用?

持续集成的自动化测试通常需要将代码、测试用例与持续集成工具进行绑定&#xff0c;以实现自动运行。然而&#xff0c;Apipost的自动化测试功能需要手动操作&#xff0c;并且需要手动查看测试结果。 为了解决这个问题&#xff0c;Apipost推出了持续集成功能&#xff0c;方便同…