【C++】面向对象高级编程(3):类与类之间的关系

2023-05-16

–本文来自侯捷老师的课程和自己的理解形成的笔记

若有错误,欢迎指出

C++类和类之间,在侯捷老师的课程中,一般被分为三种关系

复合关系、委托关系和继承关系

复合关系:指类中包含另一些类

比如STL里面我们说过,queue类里面包含一个底层容器类deque,用图的表现形式可以如下:
在这里插入图片描述
符合关系下的内存,需要将其含有的类也拆开去计算。在这里插入图片描述
复合关系下的构造与析构:
这三种类型都只用记住一句话:
构造由内向外,析构由外向内。
在这里插入图片描述

委托关系:类A中有类B的指针,可以随时调用B。

既然使用了指针,代表A和B的生命周期是不同步的。
表现形式如下:
在这里插入图片描述
委托类最重要的作用在于:
可以让接口和实现分离,方便于根据不同需要切换不同版本的实现。

除此之外,在上图的设计模式中需要注意,假如a需要更改Hello的值,则只会提供副本供其修改。

继承关系:表示B是一种A

在这里插入图片描述
有三种继承方式,public,private,protected
public继承:父类的protected,public成员在子类中不发生变化。
protected继承:父类的protected,public成员在子类中的属性降为proteced
private继承:父类的protected,public成员在子类中降为private

注意,继承对于函数的继承更像是调用权的继承,而不是内存的角度去分析。

继承关系下的构造和析构函数和复合关系下的相同:
构造由内而外,析构由外而内。
在这里插入图片描述
同时,基类函数的析构函数一定要是虚函数的原因是:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。

关于虚函数:
在这里插入图片描述
此外,我们需要分清楚重载(overload),重写(overried),重定义(redefining)的区别:

重载(overload):重载是一个类里面的一个函数,根据传入参数的不同,而实现的不同版本。

重写(override):也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态。

重定义(redefining):也叫隐藏,子类重新定义父类中有相同名称的非虚函数,参数列表可以相同可以不同,会覆盖其父类的方法,未体现多态。
a如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。
b如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。(如果有virtual就成重写了)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】面向对象高级编程(3):类与类之间的关系 的相关文章

  • HashMap、ConcurrentHashMap 一行代码实现批量删除元素

    我不想迭代器遍历 xff0c 想找个短点的方式 xff0c 但是查了一下没满意的 xff0c 自己搞一个 xff0c 比较初级的代码 span class token keyword public span span class token
  • vue2\vue3 + ts项目中如何优雅的使用localStorage,可以设置过期时间,存储值加密

    title storage ts Desc 对存储的简单封装 加密库 import CryptoJS from 34 crypto js 34 import projectPrefix expireTimes from 34 variabl
  • SpringBoot:使用application/octet-stream 流式上传大文件,解决Mutipartfile multipart/form-data上传产生临时文件问题

    目录 multipart原理简介multipart的流是服务器临时文件流multipartfile生成临时文件到默认文件夹临时文件的目录可配Mutipartfile的文件默认来自临时文件 Mutipartfile产生临时文件的好处坏处好处坏
  • SpringBoot+Mybatis 动态多数据源

    目录 前言代码 前言 基于SpringBoot Mybatis Druid实现一个服务连接多个数据库的动态数据源代码 xff0c 本文中数据源是固定两个 xff0c 在配置文件和代码中写死成两个了 xff0c 如果需要更多可以修改配置和代码
  • 基于SpringBoot实现的小区物业管理系统(含文档)

    一 技术 框架 xff1a springboot xff0c mybatis xff0c html 工具 xff1a idea或者eclipse xff0c navicat 数据库 xff1a mysql 二 功能描述 1 系统管理 小区物
  • JPA 中的entityManager.createNativeQuery()

    在JPA 中的entityManager createNativeQuery sql 我们用来执行原生的sql xff0c 什么叫原生的sql xff0c 你写的这个sql呢 xff0c 放到数据库中拼接上参数就可以直接执行了 代码举例 s
  • SpringMVC配置详解以及工作流程

    1 SpringMVC配置详解 xff1a 配置激活 64 controller和 64 RequestMapping注解的语句配置静态资源过滤器配置视图解析器 xff0c 如果使用freemarker插件视图解析器的配置在后面实现文件上传
  • python两个服务器之间进行文件传输(转载)

    import os import paramiko class SSHConnection object def init self host port username pwd self host 61 host self port 61
  • linux服务器开机启动流程

    Linux服务器开机启动流程顺序 xff1a 通电 gt BIOS gt 主引导记录 xff08 MBR xff09 gt grub引导 gt 加载内核 gt init进程 gt 读取 etc inittab xff08 运行级别 xff0
  • CentOS7升级8及glibc更新尝试

    CentOS7升级8及glibc更新尝试 建国70周年 xff0c 想听我和我的祖国 xff0c 想着下载个网易云音乐 结果启动 xy 64 xycto netease cloud music 发现libgcc版本太低不支持 xff0c o
  • 消息队列3个面试题

    1 在何种场景下使用了消息中间件 xff1f 2 为什么要在系统里引入消息中间件 xff1f 3 如何实现幂等 xff1f 链式调用是我们在写程序时候的一般流程 xff0c 为了完成一个整体功能 xff0c 会将其拆分成多个函数 xff08
  • 华为开发者大会2019观后感

  • element 时间日期选择器限制选择至少7天,快捷选择回调使用methods内的方法

    template部分代码 lt el date picker append to body 61 34 false 34 64 change 61 34 dateChange1 34 v model 61 34 targetTime1 34
  • win7+Ubuntu18.04双磁盘双系统安装踩坑记录

    win7 43 Ubuntu18 04双磁盘双系统安装踩坑记录 重装双系统 之前安装的双系统不知道什么原因不能进入了 xff0c 只能进入win7系统 xff0c 试了很多办法后决定重装ubuntu 1 备份原始Ubuntu重要文件 进入w
  • 指针和函数

    指针和函数 1 形参改变不了实参的值 图1 图1 2 通过地址传递可以改变实参的值 xff1a 图2 注意 xff1a 在图1与图2 在定义函数参数中 a b前 星号 的有无 说明传递的是 实参的地址与实参的值 2 函数参数中如果有数组 都
  • 文件操作

    文件操作 1 文件分类 xff1a 文本文件 xff08 例 xff1a 记事本 xff09 二进制文件 xff08 例 xff1a 视频文件 xff09 xff0c 优点 xff1a 所占内存较小 操作文件地址的两种方式 xff1a 相对
  • 简易文本编辑器

    C语言QT开发简易文本编辑器 文件 xff1a 新建 打开 保存 另存为 推出 编辑 xff1a 撤销 赋值 粘贴 剪切 构架 xff1a 编译 帮助 xff1a 关于 删除下方对框栏 设置textexit全屏 先点击textedit 然后
  • 二叉树编程

    二叉树编程 span class token macro property span class token directive keyword define span CRT SECURE NO WARNINGS span span cl
  • 字符串

    字符串 目标 认识字符串下标切片常用操作方法 一 认识字符串 字符串是 Python 中最常用的数据类型 我们一般使用引号来创建字符串 创建字符串很简单 xff0c 只要为变量分配一个值即可 a span class token opera
  • 集合

    集合 目标 创建集合集合数据的特点集合的常见操作 一 创建集合 创建集合使用 或set xff0c 但是如果要创建空集合只能使用set xff0c 因为 用来创建空字典 s1 span class token operator 61 spa

随机推荐

  • 函数一

    文章目录 函数目标一 函数的作用二 函数的使用步骤2 1 定义函数2 2 调用函数2 3 快速体验 三 函数的参数作用四 函数的返回值作用4 1 应用 五 函数的说明文档5 1 语法5 2 快速体验 六 函数嵌套调用七 函数应用7 1 打印
  • 概率论的基本概念

    概率论的起源与发展 概率论产生于十六世纪十六世纪中叶 xff0c 卡当在赌博时研究不输的方法1654年 xff0c 德 美黑 合理分配赌注问题 1657年 xff0c 惠更斯 论机会游戏的计算 1933年 xff0c 柯尔莫哥洛夫 概率论的
  • java中的常量与变量

    常量 常量 xff1a 在程序运行期间 xff0c 固定不变的量 常量的分类 xff1a 1 字符串常量 xff1a 凡是用双引号引起来的部分 xff0c 叫做字符串常量 例如 xff1a abc Hello 123 2 整数常量 xff1
  • OA多级审批流程表设计方案以及开发思路(非常细节)

    OA office automation 想必大家都已不陌生 xff0c 甚至还非常熟悉 xff0c 是的没错 xff0c 本文就来讲解一下OA中的核心业务 xff0c 审批流程是如何一步步实现的 本文干货满满 建议静下心来细细品 被审核流
  • 异或交换两个数

    异或交换两个数 a和b是两个整数 xff0c 经过以下三次异或操作 xff0c 可以达到交换目的 xff1a a 61 a b b 61 a b a 61 a b 首先要理解 xff0c 什么是 异或 操作 二进制两数运算结果 xff1a
  • 二叉树算法框架思想

    二叉树算法设计的总路线 xff1a 明确一个节点要做的事情 xff0c 然后剩下的事抛给框架 span class token keyword void span span class token function traverse spa
  • Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网 xff0c 二者虽然名字有不同 xff0c 但是数据还是一样的 xff0c 区别就在于前者把后者的所有店铺和商品的海量数据按照销售量 好评度 信誉度综合测评 重新计算 重新排序展现给买家的一个
  • 利用 Python 一键下载网易云音乐 10W+ 乐库

    如果你常听音乐的话 xff0c 肯定绕不开网易云 xff0c 作为一款有情怀的音乐 App xff0c 我对网易云也是喜爱有加 虽然说现在都已经是 5G 时代了 xff0c 大家的手机流量都绰绰有余 xff0c 但在线播放还是不如本地存着音
  • Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?

    一 ChromeDriver的安装 若想使用Selenium成功调用Chrome浏览器完成相应的操作 xff0c 需要通过ChromeDriver来驱动 我们在下载之前先来确认下我们使用的Chrome浏览器版本 只需要红框内几位相同即可 根
  • Python 爬虫:获取 JS 动态内容——应用宝搜索应用!

    1 1 Ajax 异步加载生成网页内容 现在越来越多的网页使用 Ajax 异步加载方式 xff0c 即网页中的一些内容由前端的 JS 动态生成 由于呈现在网页上的内容是由 JS 生成而来 xff0c 我们能够在浏览器上看到 xff0c 但是
  • Es的核心概念

    索引 xff08 Index xff09 一个索引就是一个拥有几分相似特征的文档的集合 比如说 xff0c 你可以有一个客户数据的 索引 xff0c 另一个产品目录的索引 xff0c 还有一个订单数据的索引 一个索引由一个名字来标识 xff
  • spark的结构化API

    1 结构化API概述 Apache Spark是一个用于大规模数据处理的快速 xff0c 可靠 xff0c 容错的分布式计算框架 Spark有两套基本的API xff08 Application Programming Interface
  • Linux的开机启动流程详解

    Linux系统的启动过程要比Windows系统启动过程复杂 xff0c 其过程可以分为5个阶段 xff1a 内核的引导 运行 init 系统初始化 建立终端 用户登录系统 1 内核引导 xff1a 在Windows系统中 xff0c 当计算
  • Warning: Stopping docker.service, but it can still be activated by: docker.socket

    目录 问题描述Warning Stopping docker service but it can still be activated by docker socket 原因解释 解决方案一解决方案二总结 问题描述 使用docker时 x
  • 最受推荐的10本C/C ++书籍

    链接 xff1a https hackr io blog 10 best c cpp books C和C 43 43 是世界上最流行的编程语言之二 C 43 43 是C语言的扩展 xff0c 这两门语言的潜力都是不可估量的 xff0c 这就
  • Centos安装Gnome Desktop

    Centos安装Gnome Desktop 目录 Centos安装Gnome Desktop1 安装 X Window System2 查看桌面3 安装GNOME Desktop4 运行桌面环境5 开机启动桌面环境6 重启系统 xff0c
  • zookeeper选举机制详解

    目录 1 什么是ZAB协议2 ZAB协议定义的四种节点状态3 集群上线时的Leader选举过程4 崩溃恢复时的Leader选举5 主从服务器之间的数据同步6 CAP 定理7 CAP 权衡8 BASE 理论9 集群节点数量最好奇数10 Zoo
  • Python -- 网络编程

    目录 1 网络通信的概念 2 IP地址 3 网络通信方式 3 1 直接通信 3 2 使用集线通信 3 3 通用交换机通信 3 4 使用路由器连接多个网络 3 5 复杂的通信过程 4 端口 4 1 端口号 4 2 知名端口号 4 3 动态端口
  • 一篇文章,详细教你怎么在Linux上编译安装MariaDB(10.6.4)

    快捷目录 MariaDBMariaDB简介MariaDB VS MySQL 教程说明编译说明安装依赖下载MariaDB源码Cmake编译初始化和配置1 设置用户2 初始化脚本3 设置参数4 注册服务和环境变量5 设置root用户注意 测试连
  • 【C++】面向对象高级编程(3):类与类之间的关系

    本文来自侯捷老师的课程和自己的理解形成的笔记 若有错误 xff0c 欢迎指出 C 43 43 类和类之间 xff0c 在侯捷老师的课程中 xff0c 一般被分为三种关系 复合关系 委托关系和继承关系 复合关系 xff1a 指类中包含另一些类