类和对象的深入了解6

news2025/5/24 12:02:28

1.初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式

class Date
{
public:

 Date(int year, int month, int day)
 : _year(year)
 , _month(month)
 , _day(day)
 {}
 
private:
 int _year;
 int _month;
 int _day;
};

注意:

1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次,但是构造函数可以多次调用)。

2. 类中包含以下成员,必须放在初始化列表位置进行初始化(其余的可以放入,也可以放入构造函数内):

1. 引用成员变量

2.const成员变量

3.自定义类型成员(且该类没有默认构造函数时)。

class A
{
public:
 A(int a)
 :_a(a)
 {}
private:
 int _a;
};
class B
{
public:
 B(int a, int ref)
 :_aobj(a)
 ,_ref(ref)
 ,_n(10)
 {}
private:
 A _aobj; // 没有默认构造函数
 int& _ref; // 引用
 const int _n; // const 
};

3.尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使 用初始化列表初始化。

4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。

class A
{
public:
 A(int a)
 :_a1(a)
 ,_a2(_a1)
 {}
 
 void Print() {
 cout<<_a1<<" "<<_a2<<endl;
 }
private:
 int _a2;
 int _a1;
};
int main() {
 A aa(1);
 aa.Print();
}

上述代码运行结果是什么呢?

A. 输出1 1     B.程序崩溃     C.编译不通过     D.输出1 随机值

答案为D

上述规则中我们知道初始化列表会先执行声明的成员变量,我们可以看到类中先声明的成员变量为_a2,然后为_a1,这样的话在初始化列表中先初始化_a2,但是给_a2的初始化值为_a1,但是此时的_a1还未初始化,所以_a2为随机值,_a1为a。



2.explicit关键字

构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函 数,还具有类型转换的作用。

上述代码中存在一个只需要传一个int 类型参数的构造函数,正是这一点我们可以写出下面的隐式类型转换,我们写的A b1 =2,意思其实是提供一个2给构造函数,创建一个临时的对象吗,然后再拷贝构造给b1对象(当然,如果是多个形参也可以,只是需要用花括号括起来)。

那么这里与explicit有何关系呢?

我们只需要在对应的构造函数前加上该关键字,就可以让其不发生隐式类型转换。

 

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

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

相关文章

Cellpress|单细胞文章|单细胞转录和大队列食管癌免疫治疗

新辅助免疫检查点阻断 (ICB) 在可手术食管鳞状细胞癌 (ESCC) 中显示出希望&#xff0c;但缺乏可用的疗效生物标志物。该文章对接受新辅助 ICB 的 ESCC 患者的肿瘤进行单细胞 RNA 测序&#xff0c;发现一组表达SPRY1 (CD8 Tex-SPRY1) 的耗竭 CD8 T 细胞亚群&#xff0c;其显示…

72.结构体变量直接赋值

目录 一.结构体变量直接赋值 二.视频教程 一.结构体变量直接赋值 通过上节课的学习得出了一个结论&#xff1a;俩个相同类型的结构体变量直接可以只用赋值号进行赋值。 像这样&#xff1a; struct test {int a;int b; };int main(void) {struct test x {1,2};struct test …

反序列化靶机实战serial(保姆级教程)

一.信息收集 靶机地址下载&#xff1a;https://download.vulnhub.com/serial/serial.zip 打开靶机&#xff0c;在kali虚拟机中进行主机存活探测 可以知道靶机ip地址为192.168.133.171 然后扫描端口 可以发现有一个22端口跟80端口 然后接下来用kali扫描它的目录 可以发现有一…

10年仓库管理经验:“管、存、发、盘”一文搞定!

前段时间去一家仓储设备公司交流学习&#xff0c;和一位有着10年经验的老仓管聊了个痛快&#xff0c;从他那儿学到了不少仓库管理的实践方法。 回来自己整理了一套仓库管理高效的实用方法&#xff0c;现在就来跟大家伙儿聊聊仓库管理中那些常见问题&#xff0c;以及我是怎么琢…

vite构建vue3项目hmr不生效问题踩坑记录

vite构建vue3项目hmr不生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR&#xff08;热模块替换&#xff09;带来的好处&#xff1a; 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码&#xff0c;减少等待时间保持应用状态在模块…

技术分享| 前端性能优化——虚拟滚动(Virtual Scroll)

前端遇到大量数据&#xff08;尤其是大数据表&#xff09;的DOM 渲染时&#xff0c;通常会卡顿&#xff0c;需要考虑优化性能问题&#xff0c;这里针对DOM 渲染引出“虚拟滚动”方案&#xff0c; 详细请在以下各文章中详细了解&#xff1a; vue插件 vue-virtual-scroll-list解决…

C语言| 文件操作详解(二)

目录 四、有关文件的随机读写函数 4.1 fseek 4.2 ftell 4.3 rewind 五、判定文件读取结束的标准与读写文件中途发生错误的解决办法 5.1 判定文件读取结束的标准 5.2 函数ferror与feof 5.2.1 函数ferror 5.2.2 函数feof 在上一章中&#xff0c;我们主要介绍了文件类型…

鸿蒙系统开发【事件订阅】网络

事件订阅 介绍 本示例通过ohos.telephony.observer等接口订阅网络状态、信号状态、蜂窝数据、sim状态等事件&#xff0c;并获取状态变化返回的结果。 效果预览 使用说明 1.打开应用&#xff0c;开启所有订阅事件开关。 2.开关一次移动网络&#xff0c;触发网络状态变化。 …

Linux-4:Shell编程——基础语法(50%-100%)

目录 前言 一、数组 1.数组定义 2.关联数组 3.数组长度 二、运算符 1.算术运算符 2.关系运算符 3.布尔运算符 4.逻辑运算符 5.字符串运算符 6.文件测试运算符 三、read命令 1.接收用户输入 2.开启转义 3. -p 输入提示 4. -s 静默模式 -t 设置超时时间 5.读取…

Spark Steaming有状态转换实验

创建一个streaming目录 mkdir streaming 一、运行网络版的WordCount 1. 连接虚拟机后利用sudo打开hosts后加入红色方框内语句并保存&#xff1a; sudo vim /etc/hosts Netcat是一个用于TCP/UDP连接和监听的Linux工具, 主要用于网络传输及调试领域。先下载&#xff1a; sudo…

简明中医辨证施治小程序

这是一款学习中医辨证施治的好工具&#xff0c;将中医内科、妇科、儿科常见疾病的辨证施治进行整理&#xff0c;各种疾病的辨证分型、症状、治法、方剂选用等均编辑成简明的条目&#xff0c;一目了然&#xff0c;另外内含方剂学及中药学&#xff0c;内容包括常用方剂的出处、组…

GO goroutine状态流转

Gidle -> Grunnable newproc获取新的goroutine&#xff0c;并放置到P运行队列中 这也是go关键字之后实际编译调用的方法 func newproc(fn *funcval) {// 获取当前正在运行中的goroutinegp : getg()// 获取调用者的程序计数器地址&#xff0c;用于调试和跟踪pc : getcallerp…

量化小白也能自动化挖掘出6万+因子

最近逛某乎&#xff0c;碰到了这个问题&#xff1a;如何看待量化交易WorldQuant世坤大赛北大牛人提交了6万因子&#xff1f; 我的第一直觉&#xff0c;这肯定不是纯手工挖出来的&#xff0c;6w个因子&#xff0c;一天挖一个&#xff0c;节假日都不休息的话&#xff0c;需要164年…

轻松入门Linux—CentOS,直接拿捏 —/— <6>vim集合

一、Vim操作详解 1、linux彩蛋 输入命令python会启动Python解释器&#xff0c;允许你输入和执行Python代码。然后&#xff0c;输入import this会导入this模块&#xff0c;它是Python的一种彩蛋&#xff08;Easter egg&#xff09;&#xff0c;然后得到下列结果 选中这段结果复…

Nacos安装教程(全网最靠谱,最简单~)

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 本文将详细介绍 Nacos 的安装及使用。 官方网址&#xff1a;Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方…

3.7.物体检测算法

物体检测算法 1.R-CNN ​ 首先使用启发式搜索算法来选择锚框&#xff0c;使用预训练模型对每个锚框抽取特征&#xff0c;训练一个SVM来对类别分类&#xff0c;最后训练一个线性回归模型来预测边缘框偏移。 ​ R-CNN比较早&#xff0c;所以使用的是SVM 1.1 兴趣区域(RoI)池化…

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

【数据结构进阶】手撕红黑树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;红黑树的概念&#x1f525;手撕红黑树红黑树结点的定义红黑树主体需要实现的成员函数红黑树的插入findEmpty和Size拷贝构造析构函数和…

CANFD报文 位时间 理解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…