类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表
1.1作用:
通过特定的值,来初始化对象。
1.2定义:
初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间)。这就是为什么无参构造函数,直接在函数体写赋值语句就好了,因为已经开好空间了。
注:初始化列表和拷贝构造有相同点,都需要传参。但是拷贝构造肯定要用这个参数来初始化对象,初始化列表可以不用这个参数,有这个参数,只是为了和默认构造区分开。
1.3格式:
初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。初始化列表需要传参。
注:
区分初始化和赋值。
1.4特性:
1.每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。
2.引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。
3.C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显⽰在初始化列表初始化的成员使⽤的。
4.初始化列表中按照成员变量在类中声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆关。建议声明顺序和初始化列表顺序保持⼀致。
1.5案例:
案例一: 体现 特性1
案例一解析:
为什么只能出现一次?可以理解为,初始化列表就是定义变量的地方,类似于发生重定义。
(至于为什么这么理解,本人现在无法解释,先记忆住这个知识点吧。)
案例二: 拷贝构造和初始化列表的关系
既然初始化列表可以传参,那也可以将 类 传参。那么拷贝构造和初始化列表写法就一样了。哪个是拷贝?哪个是初始化列表?
构造:
初始化列表:
案例二解析:
初始化列表和拷贝构造,最根本的区别就是:初始化列表用不用这个参数,无所谓,拷贝构造要用这个参数来初始化对象。既然初始化列表可以不用这个参数,那么这个参数的价值是什么?为了和默认构造函数构成函数重载
代码参考:
class A {
public://无参构造A(){_a = 10;_b = 20;}//A()// //:_a(100)// //,_b(200)//{//_a = 15;//_b = 30;//_c = 50;//}A(const A& aa) {_a = aa._a;}//A(const A& bb) // //:_a(100)// //,_b(200)//{// _a = 15;// _b = 30;// _c = 50;//}private:int _a=0;int _b=0;int _c=0;
};
int main() {A a1;//哪个是拷贝?哪个是初始化列表?A a2(a1);A a3;getchar();return 0;
}
案例三: 特性2
案例三第一部分: 特性2
const修饰的变量和引用一样,这两者必须在初始化的时候就赋值。不能通过赋值语句来赋值。
为什么会报错?这就需要提及1.3的注了,这里函数体是赋值的地方。那怎样写才是对的?
案例三第一部分解析:
const 和 引用这是两个特例,需要格外记忆。
案例三第二部分: 特性2
案例三第二部分解析:
通过案例二,我们知道,初始化列表需要传参,是为了和构造函数,构成函数重载。而且初始化列表和构造的区别就是,初始化列表可以不用这个参数。
通过案例三第二部分,我们知道。如果 类(MuQueue) 成员有自定义类型(Stack),且该自定义类型没有默认构造,那么初始化 类 ,就会导致编译的时候就会报错。如果用初始化列表来初始化 类 ,就可以指定该自定义类型如何初始化。
代码参考:
class Stack {
public:Stack(int n) {_a = (int*)malloc(sizeof(int) * n);_top = 0;_capacity = n;}
private:int* _a;int _top = 0;int _capacity = 0;
};class MyQueue {
public:/*MyQueue() {cout << "MyQueue()" << endl;_size = 10010;}*/MyQueue(int n):pushst(n), popst(n), _size(0){cout << "MyQueue(int n) " << endl;}
private:Stack pushst;Stack popst;int _size;
};int main() {//调用的是构造函数//MyQueue q1;//调用的是初始化列表MyQueue q2(20);return 0;
}
案例四: 特性4
案例四解析:
在VS2019及之后的版本中。编译器优化掉这一部分了。这一特性仅供了解。
1.6思考:为什么要用初始化列表?初始化列表有什么用?我用构造函数,不能满足要求么?
答: 因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。
如果你没有给缺省值,对于没有显⽰在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构造会编译错误。
1.6总结:
- ⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表;
- ⽆论是否在初始化列表显⽰初始化,每个成员变量都要⾛初始化列表初始化;
2.隐式类型转化
2.1作用:
提高了代码的效率,同时提高了代码的可读性。
2.2案例
案例一: 内置类型的隐式类型转化
案例一解析:
如果两个不同类型的对象要赋值。那么就会生成一个临时量来存值。
案例二: 自定义类型的隐式类型转化
案例二解析:
第一个 a1 是什么,好理解,就是用的初始化列表。可是 a2 为什么没有报错啊?一个是 int 类型,一个是 A 类型。
这里就和 案例一 类似了。
而VS2019之后的版本,对于 连续的构造、拷贝构造,直接优化为构造了。没有中间的拷贝构造了。
当然,这里不会报错的本质是因为:A 类型是单参数(且是int 类型)的构造。
案例三: 隐式类型转化的好处
案例三解析:
提高了代码的可读性。
代码参考:案例五
案例四: 取消隐式类型转化
代码参考:案例五
案例五: 多参数的隐式构造
案例五解析:
多参数的,需要用 ' {} ' 。
代码参考:
class A {
public:A(int a, int b):_a1(a), _a2(b) {}
private:int _a1;int _a2;
};
class Stack {
public:void Push(const A& aa) {//...}
};
int main() {A test = { 100,200 };Stack st;st.Push(test);st.Push({100,200});return 0;
}
3.最后两个默认成员函数
3.1const来修饰成员函数(理解)
作用:
为了让传参的时候,发生权限的放大,导致调用函数失败。
格式:
在函数声明和定义的后面,加长const
案例一:
d1的权限是只读,但是print的参数权限是可读可写。
这里传参发生了,对参数权限的放大,所以会报错。如果用const修饰成员函数,那么就不会发生参数权限的放大。
案例二:
这里很奇怪,只需要交换一下参数的顺序,就不会报错了。和案例一类似,在传参的时候权限发生了放大。
总结:
如果在给成员函数传参的时候,不想让参数在函数内得到改变,就将成员函数用const修饰(本质就是给成员函数的所有参数,加一个const)
3.2取地址操作符重载(了解)
取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,⼀般这两个函数编译器⾃动⽣成的就可以够我们⽤了,不需要去显⽰实现。除⾮⼀些很特殊的场景,⽐如我们不想让别⼈取到当前类对象的地址,就可以⾃⼰实现⼀份,胡乱返回⼀个地址。
都是获取一个地址,上面两张图,并没有什么明显的变化。
下面这张图就不是了:返回的是一个地址,至于能不能用,就不知道了。所以说,实践意义并不大。
相关文章:
类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表 1.1作用: 通过特定的值,来初始化对象。 1.2定义: 初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间…...
uni-app运行 安卓模拟器 MuMu模拟器
最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器,如果系统…...
java 打印对象所有属性的值 循环
在Java中,如果你想要打印一个对象的所有属性值,可以使用反射(Reflection)来获取对象的所有字段,并循环遍历这些字段以打印它们的值。以下是一个示例代码,展示了如何实现这一点: 示例类 假设我…...
k8s认证、授权
在 Kubernetes 中,kubectl auth can-i 命令用于检查当前用户或指定的 ServiceAccount 是否有权限执行特定的操作: kubectl auth can-i create deployment --as system:serviceaccount:default:dev-sa这个命令的作用是检查名为 dev-sa 的 ServiceAccount…...
基于spring boot的纺织品企业财务管理系统论文
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升&…...
@RequestBody和前端的关系以及,如何在前后端之间传递数据?
RequestBody 注解在 Spring MVC 中用于将 HTTP 请求体中的数据绑定到控制器方法的参数上。为了更好地理解 RequestBody 和前端之间的关系,我们可以从以下几个方面进行探讨: 1. 请求体的格式 前端发送的请求体通常是一个 JSON 字符串,也可以…...
详解登录MySQL时出现SSL connection error: unknown error number错误
目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后,使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件,然后按下图所示添加配置 此时再…...
【大数据学习 | Spark-Core】Spark的改变分区的算子
当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时,是需要shuffle的。 但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系&…...
Spring Boot Web应用开发:测试
在Spring Boot中,测试是开发过程的一个重要部分,它确保你的应用按预期工作,并且可以帮助你在早期发现和修复问题。Spring Boot提供了多种便捷的测试工具,使得编写和运行测试案例变得简单。 Spring Boot测试简介 Spring Boot支持…...
服务器数据恢复—光纤存储FC硬盘数据恢复案例
服务器存储数据恢复环境: 某品牌光纤存储上共有16块FC硬盘。存储上的卷映射到Linux操作系统上。Linux操作系统上运行Oracle数据库。 服务器存储故障&检测: 存储上2块硬盘故障灯亮起,存储映射到linux操作系统上的卷挂载不上,业…...
Android Binder技术概览
Android中的Binder是一种基于远程过程调用(Remote Procedure Call, RPC)的轻量级通信机制,核心用于 Android 系统中的进程间通信(Inter-Process Communication, IPC)。Binder 是 Android 系统中不可或缺的一部分&#…...
09 —— Webpack搭建开发环境
搭建开发环境 —— 使用webpack-dev-server 启动Web服务,自动检测代码变化,有变化后会自动重新打包,热更新到网页(代码变化后,直接替换变化的代码,自动更新网页,不用手动刷新网页) …...
深度学习模型:卷积神经网络(CNN)
一、前言 CNN 的发展历程可以追溯到 20 世纪 80 年代和 90 年代。受生物视觉系统的启发,研究人员开始探索如何构建专门用于处理图像数据的神经网络。早期的一些研究奠定了基础,例如 Fukushima 提出的 Neocognitron 模型。 随着时间的推移,到…...
Flask 自定义路由转换器
步骤 创建自定义转换器类 继承 werkzeug.routing.BaseConverter。实现 to_python 和(可选)to_url 方法。 将转换器注册到 Flask 应用 在路由中使用转换器 示例 创建转换器 假设需要自定义一个转换器 FourDigitYearConverter,用于匹配四位年…...
【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么?
博客主页: [青松] 本文专栏: NLP 大模型百面百过 【淘汰9成NLP面试者的高频面题】LSTM中的tanh和sigmoid分别用在什么地方?为什么? 重要性:★★★ 💯 本题主要考察面试者对以下问题的理解: ① 数据特征和模…...
gocv调用opencv添加中文乱码的解决方案
前言 相信很多做视觉的同学在使用opencv给图片添加中文文字的时候会出现这样的乱码显示: 而实际上你期望的是“告警时间:2011-11-11 11:11:11 告警类型:脱岗检测告警 Area:XXXXX Camera:Camera001-001”这样的显示内容,那么这篇文章我将用很简单的方法来解决乱码问题,只需…...
org.apache.log4j的日志记录级别和基础使用Demo
org.apache.log4j的日志记录级别和基础使用Demo,本次案例展示,使用是的maven项目,搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件,log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…...
IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)
今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1: 给定如下图所示的timing report,请回答一下几个问题。 1)这是一条setup还是hold的timing report?…...
java centos 离线使用sherpa-onnx文字转语音TTS
sherpa-onnx: https://github.com/k2-fsa/sherpa-onnx.git 文档链接;Java API — sherpa 1.3 文档 1. 项目基础介绍和主要编程语言 sherpa-onnx 是一个基于下一代 Kaldi 和 onnxruntime 的开源项目,专注于语音识别、文本转语音、说话人识别和语音活动检测(VAD)等功能。该项…...
Android 11 三方应用监听关机广播ACTION_SHUTDOWN
前言 最近有项目过程中,有做app的同事反馈,三方应用无法监听关机广播。特地研究了下关机广播为啥监听不到。 1.原因:发送关机广播的类是ShutdownThread.java,添加了flag:Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER…...
OpenHarmony-3.驱动HDF
OpenHarmony HDF 框架 1.OpenHarmony HDF 框架概述 OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力…...
《白帽子讲Web安全》13-14章
《白帽子讲Web安全》13-14章 《白帽子讲Web安全》13-14章13、应用层拒绝服务攻击13.1、DDOS简介13.2、应用层DDOS13.2.1、CC攻击13.2.2、限制请求频率13.2.3、道高一尺,魔高一丈 13.3、验证码的那些事儿13.4、防御应用层DDOS13.5、资源耗尽攻击13.5.1、Slowloris攻击…...
CSS - CSS One-Line
1. aspect-ratio 描述: 用于定义元素的宽高比,简化了以往使用“填充黑客”的方法。只需指定一个比率,浏览器会自动调整元素的尺寸 案例: .aspect-ratio-hd {aspect-ratio: 16/9; } .aspect-ratio-square {aspect-ratio: 1; /* 正方形 */ }2. object-…...
gitlab ssh-key 绑定
windows环境下配置 gitlab的ssh key: 1.打开本地git bash,使用如下命令生成ssh公钥和私钥对: ssh-keygen -t rsa -C xxxxxx.com 2.一直回车; 3.然后打开公钥文件:C:/Users/Administrator/.ssh/id_rsa.pub文件,复制其中的内容; 4…...
wordpress使用Markdown语法写的文章图片显示不正常,记录一次折腾之旅
wordpress使用Markdown语法写的文章图片显示不正常,记录一次折腾之旅 当我把wordpress站点地址改成域名之后,wordpress上写的文章是使用Markdown语法进行写作的,但是Markdown引用的图片就会加载不出来,但如果把站点地址改成局域网的IP,所有的一切都显示正常了。除非我把图…...
从零开始学GeoServer源码(二)添加支持arcgis切片功能
文章目录 参考文章环境背景1、配置打包好的程序1.1、下载GeoServer的war包1.2、下载GeoWebCache1.3、拷贝jar包1.4、修改配置文件1.4.1、拷贝geowebcache-arcgiscache-context.xml1.4.2、修改geowebcache-core-context.xml1.4.3、修改geowebcache-servlet.xml 1.5、配置切片信息…...
WPF异步UI交互功能的实现方法
前面的文章我们提及过,异步UI的基础实现。基本思路主要是开启新的UI线程,并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。 但是,之前的实现访问是没有交互能力的,视觉树上的UI并不能实现…...
网络基础 - 地址篇
一、IP 地址 IP 协议有两个版本,IPv4 和 IPv6IP 地址(IPv4 地址)是一个 4 字节,32 位的正整数,通常使用 “点分十进制” 的字符串进行表示,例如 192.168.0.1,用点分割的每一个数字表示一个字节,范围是 0 ~…...
# [Unity] 【游戏开发】Unity开发基础2-Unity脚本编程基础详解
Unity脚本编程是创建互动式游戏体验的核心技能之一。本文将详细讲解Unity脚本编程的基础知识,包括变量和数据类型、程序逻辑、方法等方面,并通过实例展示如何使用这些基本知识完成简单功能的实现。 1. 新建Unity脚本的基本结构 当在Unity中创建一个脚本时,Unity会生成如下基…...
Milvus实操
概念 Milvus 关键概念优化笔记 Milvus 是一个高性能、可扩展的开源向量数据库,专为处理海量向量数据和执行相似性搜索而设计。以下是 Milvus 中的一些核心概念及其详细解释。 1. 集合(Collection) 定义: 集合是 Milvus 中存储向…...
如何做企业网站后台管理/网络推广引流
1. 迁移背景介绍目前我们的图数据库数据量为 顶点 20 亿,边 200 亿的规模。在迁移之前我们使用的 AgensGraph 数据库一个主库四个备库,机器的配置都比较高,256G 内存 SSD 的磁盘,单机数据量为 3T左右。在数据量比较小的情况下 Age…...
政府网站建设需求方案/中国目前最好的搜索引擎
随便拿一个搜索引擎搜索一下“两列自适应布局”,都能得到很多种实现方法,这篇文章的重点是这些方法的底层逻辑是什么,他们是怎么得来的。 分析: 需要满足三个要求: ①两个盒子在同一行 ②右边的盒子需要占满剩下的空间…...
基础集团网站建设/惊艳的网站设计
选择宣传册的尺寸,是开始宣传册设计的第一步,宣传册印刷样式多种多样,做法千变万化,但是宣传册尺寸是宣传册的基调,最常规的规格主要有以下几种:1、最常规的宣传册印刷尺寸,适合绝大多数企业和场…...
国务院网站集约化建设/24小时最新国际新闻
我们每天行走在城市的摄像头下,我们的口袋里装满各种能表明我们身份的卡,我们的个人信息每天暴露在网络等信息平台上……无论我们去哪,不管我们做什么,都似乎有那么一双“眼睛”在看着。无处不在的“第三只眼”,凝结成…...
wordpress 餐饮 主题/搜索引擎广告案例
php保存二进制原始数据为图片的程序代码得到post过来的二进制原始数据,选择一个生成路径及图片的名字,之后写入,思路很显而易见//生成图片$imgDir uploadImg/;$filename"nissangcj".$mobile.".jpg";///要生成的图片名字…...
六枝网站建设/天津做网站的公司
一、Spring面试题 1、Spring 在ssm中起什么作用? 答: Spring:Spring轻量级框架。 作用:Bean工厂,用来管理Bean的生命周期和框架集成。 Spring框架的两大核心: ①. IOC/DI(控制反转/依赖注入) …...