C++面向对象语法总结(二)
- 目录
- 《C++基础语法总结》
- 《C++面向对象语法总结(一)》
十一、继承
- 继承,可以让子类拥有父类的多有成员(变量、函数)
- 如下面的代码:Student是子类(subclass,派生类),Person是父类(superclass,超类)

- 对象的内存布局:父类的成员变量在前,子类的成员变量在后

- 成员访问权限
- 成员访问权限、继承方式有3种
- public:公共的,任何地方都可以访问(struct默认)
- protected:子类内部、当前类内部可以访问
- private:私有的,又有当前类内部可以访问(class默认)
- 子类内部访问父类成员的权限,是以下2项种权限最小的那个
- 成员本身的访问权限
- 上一级父类的继承方式
- 开发中用的最多的继承方式是public,这样能保留父类原来的成员访问权限
- 访问权限不影响对象的内存布局
- 成员访问权限、继承方式有3种
十二、初始化列表
-
特点
- 一种便捷的初始化成员变量的方式,就是在构造函数括号后面用:隔开,初始化成员变量
- 只能用在构造函数中
- 初始化顺序只跟成员变量的声明顺序有关,和赋值顺序无关
-
下面两种写法是等价的
-
正常在函数中初始化变量

-
用初始化列表初始化变量

-
-
初始化列表中可以调用函数

-
初始化列表和默认参数配合使用

-
如果函数声明和实现是分离的,
- 初始化列表只能写在函数的实现中
- 默认参数只能写在函数的声明中
十三、构造函数的相互调用
- 子类调用父类的构造函数需要在初始化列表中调用

- 子类的构造函数默认会调用父类的无参构造函数
- 如果子类的构造函数显式调用了父类的有参构造函数,就不会再去默认调用父类的无参构造函数
- 如果父类缺少无参构造函数且父类有有参的构造函数,子类的构造函数必须显式调用父类的有参构造函数
- 继承体系下的构造函数示例

十四、构造、析构顺序
父类构造函数 ===》子类构造函数 ===》 子类析构函数 ===》父类析构函数

十五、多态
- 父类指针和子类指针
- 父类指针可以指向子类指针,是安全的,开发中经常用到(继承方式必须是public)
- 子类指针指向父类指针是不安全的


- 默认情况下,编译器智慧根据指针类型调用对应的函数,不存在多态,如果需要有多态特性,父类的函数需要声明为虚函数(virtual修饰的函数)
- 多态是面向对象非常重要的一个特性
- 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
- 在运行中,可以识别出真正的对象类型,调用对应子类中的函数
- 多态的要素
- 子类重写父类的成员函数(override)
- 父类指针指向子类对象
- 利用父类指针调用重写的成员函数
十六、虚函数
- C++中的多态通过虚函数(virtual function)来实现
- 虚函数:被virtual修饰的成员函数
- 只要在弗雷中声明为虚函数,子类中重写的虚函数也自动变成虚函数(也就是说子类中可以省略virtual关键字)
十七、虚表
-
虚函数的实现原理是虚表,这个虚表里面存储着最终需要调用的虚函数的地址,这个虚表也叫做虚函数表

-
虚表的地址在对象内存的最前面,在虚表中已经确定了该对象要使用的虚函数的地址
-
所有的对象(不管是全局区,栈、堆)共用一份虚表,因为虚表中存的是函数地址,函数是代码,在程序运行中只有一份
-
虚表的内存地址图(x86的32位环境)

-
虚表的汇编分析

十八、多态中子类调用父类的成员函数
- 子类重写了父类的函数,如果需要显式调用父类的函数,需要显式制定父类的类名和函数名

十九、虚析构函数
- 如果存在父类指针指向子类对象的情况,应该将析构函数声明为虚函数(虚析构函数)
- delete父类指针时,只有将父类析构函数声明为虚析构函数,才会调用子类的析构函数,这样才能保证析构的完整性

二十、纯虚函数
- 纯虚函数:没有函数体且初始化为0的虚函数,用来定义接口规范

- 抽象类(Abstract class)
- 含有纯虚函数的类,不可以实例化(不可以创建对象)
- 抽象类也可以包含非纯虚函数、成员变量
- 如果父类是抽象类,子类没有完全重写纯虚函数,那么子类依然是抽象类
后记
个人总结,欢迎转载、评论、批评指正
相关文章:
C++面向对象语法总结(二)
目录 《C基础语法总结》《C面向对象语法总结(一)》 十一、继承 继承,可以让子类拥有父类的多有成员(变量、函数)如下面的代码:Student是子类(subclass,派生类),Person是父类&…...
【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)
2024-1-3 文章目录 [2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)方法一:调用栈方法二:递归方法三:翻转链表 2487. 从链表中移除节点 方法一:调用栈 1.将所有节点按顺序压入栈中 2.从…...
开源协助平台工程灵活应对多云时代的挑战
平台工程通过标准化控制和灵活性保障了开发实践。但是,随着平台工程的兴起,开源战略又该如何融入其中呢? 虽然平台工程没有一刀切的方法,但越来越明显的是,开源软件和技术对平台工程的成功绝对至关重要——这一点我将在…...
Springboot通过profiles切换不同环境使用的配置
文章目录 简介1.通过分隔符隔离2.通过使用不同的配置文件区分3.测试 简介 一个项目从开发到上线一般要经过几个环境, dev测试环境-uat预生产环境-prod生产环境,每个环境的使用的数据库或者配置不同,这时候可以通过下面两种方式区分配置,达到快速切换的效…...
SpringBoot入门到精通-Spring Boot Jasypt Encrypt 演示
这是 spring boot 应用程序,展示了如何使用 Jasypt 加密值。 关于Jasypt Jasypt 为您提供简单的单向(摘要)和双向加密技术。开放 API,可与任何 JCE 提供程序一起使用,而不仅仅是默认的 Java VM 提供程序。Jasypt 可以很容易地与 Bouncy Castle 等知名提供商一起使用。了解…...
整数的阶乘(英语:factorial)是所有小于及等于
整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,0的阶乘为1。即:n!123...n。 实例 #!/usr/bin/python3 # Filename : test.py # author by : www.dida100.com # 通过用户输入数字计算阶乘 # 获…...
音视频通信
文章目录 一、音视频通信流程二、流媒体协议1、RTSP2、RTMP3、HLS4、WebRTC 一、音视频通信流程 音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。 每一个细分环节,还有更细分的技术模块。比如,前后处…...
docker 搭建gitlab 恢复和备份
最近一直在折腾gitlab 代码管理系统 采用docker搭建 镜像网址 https://hub.docker.com/ 技术交流 http://idea.coderyj.com/ 1.因为我要恢复的版本是12.0.9的所有我就下载了docker-ce的12.0.9的镜像 1.下载镜像 docker pull gitlab/gitlab-ce:12.0.9-ce.02.安装 docker run …...
尚硅谷2023版Promise教程从入门到实战(讲师:任安萍)
一、前言:为什么会出现Promise? Promise的重要性我认为没有必要多讲,概括起来说就是五个字:必!须!得!掌!握!。 而且还要掌握透彻,在实际的使用中,有非常多…...
【SpringBoot】分组校验和自定义校验
分组检验 参数校验时,我们希望不同的方法参数校验规则不同,这时就需要分组校验。 public class Category {NotNull(groups Update.class)private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称// NotEmpty(groups {Add.class,…...
19、BLIP-2
简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本,预训练的视觉模型能够提供高质量的视觉表征,预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距,提出了一个分两个阶段预训练的 Qu…...
【微服务核心】MyBatis Plus
文章目录 1. 简介2. 入门使用3. 核心功能3.1 CRUD 接口3.1.1 Mapper CRUD 接口3.1.2 Service CRUD 接口 3.2 条件构造器3.3 分页插件3.4 Mybatis-Plus 注解 4. 拓展4.1 逻辑删除4.2 MybatisX快速开发插件 5. 插件5.1 [分页插件](#page)5.2 乐观锁插件 1. 简介 MyBatis Plus&am…...
什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍
Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…...
Spark---RDD算子(单值类型Value)
文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…...
数据库中的MVCC--多版本并发控制
一、前言 1、定义:MVCC(Multi-Version Concurrency Control),多版本并发控制,主要为了提高数据库 的并发性能。是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式。用于实现提交读和可重 复读这两种隔离级别。 2…...
wps将姓名处理格式为:姓**
1.打开wps,在要处理数据右侧一个单元格 输入公式:LEFT(A1,1)&"**",然后回车 2.按住ctrl和处理好的数据的右下角小方框,往下拖动即可生成格式为:姓** 格式的数据 3.复制生成的数据,右键选择 “…...
2023年我的编程之旅:技术演进与自我成长的纪录
2023年我的编程之旅:技术演进与自我成长的纪录 转眼间,2023年已经悄然走到了尾声。这一年,对我来说既是挑战也是机遇的一年。我的编程之旅如同坐上了一辆高速前进的列车,从新技术的学习探索到项目实战的沉浸经历,再到…...
好用免费的WAF---如何安装雷池社区版
什么是雷池 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步。 什么是 WAF WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 …...
看似 bug 又非 bug 的一个 bug
最近的一个项目中,对于 CSS 的一些属性一些选择符可以大胆使用,然后很意外得撞上一个 iOS 中 Safari 的一个解析问题。 <Component style{{height: "calc(100vh - 46px)"}}>一个组件</Component> 这样的一段代码很简单ÿ…...
mysql常见问题
批量导入SQL 数据库结构 数据时,如果数据是批量插入的话会报错:2006 - MySQL server has gone away。 解决办法:找到你的 mysql 目录下的 my.ini 配置文件,加入以下代码 max_allowed_packet500M wait_timeout288000 interactiv…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
