Cpp学习——类与对象3

目录
一,初始化列表
1.初始化列表的使用
2.初始化列表的特点
3.必须要使用初始化列表的场景
二,单参数构造函数的隐式类型转换
1.内置类型的隐式类型转换
2. 自定义类型的隐式类型转换
3.多参数构造函数的隐式类型转换
4.当你不想要发生隐式类型转换时便可以使用explicit关键字。
一,初始化列表
1.初始化列表的使用
初始化列表是Cpp语法中新加的一个语法。作用是初始化类里面的一些成员。使用方式如下:
class Date {Date():_year(0),_month(0),_day(0){}private:int _year;int _month;int _day; };1.以冒号开始。
2.以逗号分割各个成员。
3.以括号里面放入相匹配的值来显示初始化成员。
执行初始化列表以后结果如下:
2.初始化列表的特点
1.初始化列表是成员定义的地方,不管有没有写初始化列表,成员都会被初始化。
比如,当我把_month成员的初始化给屏蔽掉了以后:
class Date { public:Date():_year(0)//,_month(0),_day(0){}private:int _year;int _month;int _day; };int main() {Date a1;return 0; }结果:
2. 初始化列表的执行顺序是按照声明的顺序来执行的。比如以下代码:
class A { public:A():_a1(1),_a2(_a1){}void print(){cout << "_a1:"<<_a1 << endl;cout << "_a2:"<<_a2 << endl;} private:int _a2;int _a1;};int main() {A a1;a1.print();return 0; }这样的代码得出的结果会是什么呢?会是1,1吗?其实当然不会,这个程序得出来的结果其实是:随机值,1。
为神马会这样呢?其实这就跟初始化列表走初始化的顺序有关。想要让两个值都初始化为1。调用一下声明的顺序即可:
class A { public:A():_a1(1),_a2(_a1){}void print(){cout << "_a1:"<<_a1 << endl;cout << "_a2:"<<_a2 << endl;} private:int _a1;//调用顺序int _a2;};int main() {A a1;a1.print();return 0; }结果:
3.若声明时给了缺省值,当初始化列表不显示传值的话初始化列表传入的值就是缺省值。若显式调用则为显式调用传入的值。如以下代码:
class A { public:A():_a1(1)//显式调用{}void print(){cout << "_a1:"<<_a1 << endl;cout << "_a2:"<<_a2 << endl;} private:int _a1=0;//给上缺省值int _a2=0;};int main() {A a1;a1.print();return 0; }结果:
3.必须要使用初始化列表的场景
1.const成员声明以后要定义赋值时。
2.引用成员要定义赋值时。
3.没有默认构造函数的类对象初始化时。
二,单参数构造函数的隐式类型转换
1.内置类型的隐式类型转换
在自定义类型中会发生隐式类型转换。转换的方式便是生成一个临时的对象,然后这个对象拷贝值再赋值给要初始化的对象。比如:
int main() {double a = 1;//给double对象赋一个整型值int c = 1.00;//给一个int对象赋一个浮点数cout << "a:"<<a << endl;cout << "c:" << c << endl;return 0; }这个程序的结果会是什么呢?结果:
如何证明这里发生了隐式类型转换生成了临时对象呢?这里就得用到临时对象的一个特点了:临时对象具有常性。 所以当我们用非const引用对象来接收值时若为临时对象就一定会报错。如下列代码:
int main() {double& a = 1;int& c = 1.00;cout << "a:"<<a << endl;cout << "c:" << c << endl;return 0; }结果:
当我们加上const时程序便是正常运行的:
2. 自定义类型的隐式类型转换
既然内置类型有隐式类型转换,那自定义类型也得有隐式类型转换。不过,自定义类型要想有隐式类型转换那就得有一个带参的构造函数。如以下代码:
class B { public:B(int a ){_a1 = a;};void print(){cout << _a1 << endl;}private:int _a1; };int main() {B a = 1;//正常来说应该是B a(1)这样调用的。a.print();return 0; }结果:
正常打印
为什么这样也行呢?其实这里便是发生了一个隐式类型转换。在上面代码中,1先调用构造函数把自己转化成了成一个临时的B类型的对象,再将1这个值传入到临时对象中。然后B a通过赋值调用默认生成的拷贝构造函数将临时对象里的值拷贝到a对象中。
3.多参数构造函数的隐式类型转换
多参数构造函数的隐式类型转换是在C++11之后才开始支持的新语法。原理与单参数的构造函数的隐式类型转换一样。但是使用方法不同。使用方法:
class B { public:B(int a ,int b,int c){_a1 = a;_b1 = b;_c1= c;cout << "B(int)" << endl;};B(B& B1){cout << "B(int&)" << endl;}void print(){cout << _a1 << endl;cout << _b1 << endl;cout << _c1 << endl;}private:int _a1;int _b1;int _c1; };int main() {B a = { 1,2,3 };//用花括号a.print();return 0; }结果:
4.当你不想要发生隐式类型转换时便可以使用explicit关键字。
相关文章:
Cpp学习——类与对象3
目录 一,初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二,单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…...
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&a…...
ahooks.js:一款强大的React Hooks库及其API使用教程(四)
一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程51. useResetState52. useUpdateLayoutEffect53. useDeepCompareLayoutEffect54. useRafInterval55. useRafTimeout56. useTimeout57. useLockFn58. useDocumentVisibility59. useDrop60. useDrag 一、…...
FOSSASIA Summit 2023 - 开源亚洲行
作者 Ted 致歉:本来这篇博客早就该发出,但是由于前几个月频繁差旅导致精神不佳,再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress,以及 7/29-30 台北的 COSCUP23,干脆三篇连发&#x…...
QT 基本对话框
包括: 1.标准文件对话框 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QTextCodec> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QFr…...
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022&…...
Azure静态网站托管
什么是静态网站托管 Azure Blob的静态网站托管是一项功能,它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能,您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中,并直接通过提供的URL访问这些资源。 官…...
LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表
题目一: 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求: 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可…...
常用消息中间件介绍
RocketMQ 阿里开源,阿里参照kafka设计的,Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现,非常重量级,更适…...
装饰器读取不到被装饰函数的参数-已解决
def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…...
python爬虫爬取中关村在线电脑以及参数数据
一. 内容简介 python爬虫爬取中关村在线电脑以及参数数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 三.主要流程 3.1 代码 解析都在代码里面 # 接口分析 # 原始接口,后面几个数字就是占位的,每个位置代表着不同的标签 # http…...
chatGPT-对话爱因斯坦
引言 阿尔伯特爱因斯坦( 1879年 3 月 14 日 – 1955 年 4 月 18 日)是一位出生于德国的理论物理学家,被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名,他还对量子力学做出了重要贡献,因…...
嵌入式软件开发中的数据类型转换
在嵌入式软件开发时,数据的显示必不可少,那么必定会涉及到数据类型转换。将不同类型的数据在编程中进行转换,以便满足不同的需求。 插入一个知识点: 在C语言中,字符串是由字符组成的字符数组,以null终止符…...
The Go Blog 01:反射的法则(译文)
反思的法则 罗伯-派克 2011 年 9 月 6 日 引言 计算机中的反射是指程序检查自身结构的能力,尤其是通过类型检查自身结构的能力;它是元编程的一种形式。它也是造成混乱的一个重要原因。 在本文中,我们试图通过解释 Go 中的反射是如何工作的…...
Visual Studio Code前端开发插件推荐
引言 Visual Studio Code(简称VS Code)是一款轻量级且强大的开源代码编辑器,广受前端开发者的喜爱。其丰富的插件生态系统为前端开发提供了许多便利和增强功能的插件。本篇博客将向大家推荐一些在前端开发中常用且优秀的插件,并提…...
jps(JVM Process Status Tool):虚拟机进程状况工具
jps(JVM Process Status Tool):虚拟机进程状况工具 列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class,main()函数所在的类)以及这些进程的本地虚拟机唯一ID(LVMID&am…...
初阶c语言:实战项目三子棋
前言 大家已经和博主学习有一段时间了,今天讲一个有趣的实战项目——三子棋 目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 时间戳:推荐一篇 C语言生成随机数的方法_c语言随机数_杯浅…...
计网第三章(数据链路层)(三)
一、点对点协议PPP 在第一篇里有提到数据链路层的信道分为两种:点对点信道和广播信道。 PPP协议就属于点对点信道上的协议。 如果对前面数据链路层的三个基本问题了解的比较透彻,那么这一块很多东西都很好理解。 从考试的角度来讲,PPP协议…...
蓝桥杯每日N题 (砝码称重)
大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 不清楚蓝桥杯考什么的点点下方👇 考点秘籍 想背纯享模版的伙伴们点点下方👇 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...
Opencv 视频的读取与写入
目录 前言 通过路径获取视频内容 获取视频内容 检查是否正确打开 循环播放 完整代码 从摄像头读取视频数据 获取视频设备 其他与直接读取视频一致 完整实例 录制视频 用于创建视频编解码器的四字符码(FourCC) cv2.VideoWriter() 将视频帧…...
如何让扫描PDF变得可搜索?OCRmyPDF-Desktop完整解决方案
如何让扫描PDF变得可搜索?OCRmyPDF-Desktop完整解决方案 【免费下载链接】pdfocr-desktop PDF OCR Application, adds an OCR text layer to scanned PDF files, allowing them to be copied and searched. 项目地址: https://gitcode.com/gh_mirrors/oc/pdfocr-d…...
如何通过Vial-QMK打造专属键盘体验:从入门到精通的个性化定制指南
如何通过Vial-QMK打造专属键盘体验:从入门到精通的个性化定制指南 【免费下载链接】vial-qmk QMK fork with Vial-specific features. 项目地址: https://gitcode.com/gh_mirrors/vi/vial-qmk 在数字化时代,键盘作为人与计算机交互的核心工具&…...
从零搭建AI办公助手:OpenClaw+百川2-13B-4bits七日实践计划
从零搭建AI办公助手:OpenClaw百川2-13B-4bits七日实践计划 1. 为什么选择这个组合? 去年冬天,当我第一次听说OpenClaw这个开源自动化框架时,内心是充满怀疑的。作为一个长期被各种"智能助手"忽悠的技术从业者…...
抖音视频智能管理:如何通过批量下载与自动化分类实现90%效率提升
抖音视频智能管理:如何通过批量下载与自动化分类实现90%效率提升 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在短视频内容爆炸的时代,高效的视频采集、批量下载与系统化内容管理已…...
既然有 HTTP 协议,为什么还要有 RPC?
HTTP 和 RPC 都能解决网络通信问题,但它们的设计初衷和适用场景截然不同。简单来说,HTTP 是为了通用性和跨平台设计的(像万能的集装箱),而 RPC 是为了极致的性能和开发效率设计的(像工厂内部的高速流水线&a…...
从镜像到实战:星图OpenClaw+Qwen3-32B完整链路
从镜像到实战:星图OpenClawQwen3-32B完整链路 1. 为什么选择OpenClawQwen3-32B组合 去年冬天,当我第一次尝试用AI自动化处理周报时,发现公有云方案总在数据隐私和功能定制上让我束手束脚。直到遇见星图平台的OpenClaw镜像与Qwen3-32B组合&a…...
FPGA实战:3级CIC滤波器Verilog实现与仿真(附完整代码)
FPGA实战:3级CIC滤波器Verilog实现与仿真全解析 在数字信号处理领域,CIC(Cascaded Integrator-Comb)滤波器因其结构简单、运算高效的特点,成为多速率系统中的关键组件。本文将深入探讨3级CIC滤波器的Verilog实现细节&a…...
Fish-Speech-1.5开源模型的企业级部署架构设计
Fish-Speech-1.5开源模型的企业级部署架构设计 如果你正在考虑将Fish-Speech-1.5这个强大的语音合成模型引入到自己的业务中,比如做个智能客服、有声书平台,或者给产品加个语音播报功能,那你肯定不能只满足于在本地电脑上跑个Demo。一旦涉及…...
coze-loop新手指南:无需配置,开箱即用的代码优化工具
coze-loop新手指南:无需配置,开箱即用的代码优化工具 1. 为什么你需要一个代码优化助手 想象一下这样的场景:你刚刚写完一段功能代码,运行起来没问题,但总觉得哪里不够完美。可能是执行速度不够快,或者代…...
Ling-1T万亿参数模型:高效推理新体验
Ling-1T万亿参数模型:高效推理新体验 【免费下载链接】Ling-1T-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-1T-FP8 导语:近日,inclusionAI团队正式发布了Ling系列2.0版本的旗舰模型——Ling-1T-FP8ÿ…...









