当前位置: 首页 > news >正文

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

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…...

回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&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 致歉&#xff1a;本来这篇博客早就该发出&#xff0c;但是由于前几个月频繁差旅导致精神不佳&#xff0c;再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress&#xff0c;以及 7/29-30 台北的 COSCUP23&#xff0c;干脆三篇连发&#x…...

QT 基本对话框

包括&#xff1a; 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.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑出版传媒&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&…...

Azure静态网站托管

什么是静态网站托管 Azure Blob的静态网站托管是一项功能&#xff0c;它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能&#xff0c;您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中&#xff0c;并直接通过提供的URL访问这些资源。 官…...

LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

题目一&#xff1a; 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求&#xff1a; 思路&#xff1a;一定要先找好边界。如下图 &#xff0c;上边界是1234&#xff0c;右边界是8、12&#xff0c;下边界是9、10、11&#xff0c;左边界是5&#xff0c;所以可…...

常用消息中间件介绍

RocketMQ 阿里开源&#xff0c;阿里参照kafka设计的&#xff0c;Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现&#xff0c;非常重量级&#xff0c;更适…...

装饰器读取不到被装饰函数的参数-已解决

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 代码 解析都在代码里面 # 接口分析 # 原始接口&#xff0c;后面几个数字就是占位的&#xff0c;每个位置代表着不同的标签 # http…...

chatGPT-对话爱因斯坦

引言 阿尔伯特爱因斯坦&#xff08; 1879年 3 月 14 日 – 1955 年 4 月 18 日&#xff09;是一位出生于德国的理论物理学家&#xff0c;被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名&#xff0c;他还对量子力学做出了重要贡献&#xff0c;因…...

嵌入式软件开发中的数据类型转换

在嵌入式软件开发时&#xff0c;数据的显示必不可少&#xff0c;那么必定会涉及到数据类型转换。将不同类型的数据在编程中进行转换&#xff0c;以便满足不同的需求。 插入一个知识点&#xff1a; 在C语言中&#xff0c;字符串是由字符组成的字符数组&#xff0c;以null终止符…...

The Go Blog 01:反射的法则(译文)

反思的法则 罗伯-派克 2011 年 9 月 6 日 引言 计算机中的反射是指程序检查自身结构的能力&#xff0c;尤其是通过类型检查自身结构的能力&#xff1b;它是元编程的一种形式。它也是造成混乱的一个重要原因。 在本文中&#xff0c;我们试图通过解释 Go 中的反射是如何工作的…...

Visual Studio Code前端开发插件推荐

引言 Visual Studio Code&#xff08;简称VS Code&#xff09;是一款轻量级且强大的开源代码编辑器&#xff0c;广受前端开发者的喜爱。其丰富的插件生态系统为前端开发提供了许多便利和增强功能的插件。本篇博客将向大家推荐一些在前端开发中常用且优秀的插件&#xff0c;并提…...

jps(JVM Process Status Tool):虚拟机进程状况工具

jps&#xff08;JVM Process Status Tool&#xff09;&#xff1a;虚拟机进程状况工具 列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类名称&#xff08;Main Class&#xff0c;main()函数所在的类&#xff09;以及这些进程的本地虚拟机唯一ID&#xff08;LVMID&am…...

初阶c语言:实战项目三子棋

前言 大家已经和博主学习有一段时间了&#xff0c;今天讲一个有趣的实战项目——三子棋 目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 时间戳&#xff1a;推荐一篇 C语言生成随机数的方法_c语言随机数_杯浅…...

计网第三章(数据链路层)(三)

一、点对点协议PPP 在第一篇里有提到数据链路层的信道分为两种&#xff1a;点对点信道和广播信道。 PPP协议就属于点对点信道上的协议。 如果对前面数据链路层的三个基本问题了解的比较透彻&#xff0c;那么这一块很多东西都很好理解。 从考试的角度来讲&#xff0c;PPP协议…...

蓝桥杯每日N题 (砝码称重)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...

Opencv 视频的读取与写入

目录 前言 通过路径获取视频内容 获取视频内容 检查是否正确打开 循环播放 完整代码 从摄像头读取视频数据 获取视频设备 其他与直接读取视频一致 完整实例 录制视频 用于创建视频编解码器的四字符码&#xff08;FourCC&#xff09; cv2.VideoWriter() 将视频帧…...

ComfyUI全面掌握-知识点详解——自定义节点安装与首次 AI 绘图(实操+排错)

本文为系列第 6 篇&#xff08;第一章第 5 个知识点&#xff09;&#xff0c;讲解自定义节点的作用与安装方式&#xff0c;手把手教读者加载默认工作流、完成首次 AI 绘图&#xff0c;解读核心参数并排查常见问题。 目录 一、引言&#xff1a;自定义节点是什么&#xff1f;为什…...

联邦学习与RAG融合:构建隐私保护的跨机构智能检索系统

1. 项目概述与核心价值最近在折腾一个跨机构文档智能检索的原型&#xff0c;核心需求是&#xff1a;在不共享原始数据的前提下&#xff0c;让多个参与方&#xff08;比如几家医院、几个研究实验室&#xff09;能够联合起来&#xff0c;构建一个强大的、统一的文档知识库&#x…...

Java 开发,不要瞎忙,十点睡觉六点起床,天塌不了

你是一名 Java 开发&#xff0c;不要瞎忙&#xff0c;十点睡觉六点起床&#xff0c;天塌不了。我的想法对吗&#xff1f; 没问题&#xff0c;这就给你上干货。想在 Java 开发这行准点下班&#xff0c;光靠手速快是不够的&#xff0c;核心在于掌控节奏和学会拒绝。 这里有一份帮…...

Arm Forge工具在高性能计算中的性能分析与优化实践

1. Arm Forge性能分析工具概述高性能计算(HPC)领域的开发者们经常面临一个共同挑战&#xff1a;如何从复杂的并行程序中榨取出最后一点性能潜力。Arm Forge作为一套专业的性能分析工具链&#xff0c;为这个难题提供了系统化的解决方案。我在多个超算中心的实际调优工作中发现&a…...

互联网大厂 Java 求职面试技巧揭秘

互联网大厂 Java 求职面试技巧揭秘 在当今互联网大厂求职面试中&#xff0c;技术与场景的交汇点常常成为面试官考察的重点。本文将通过一位搞笑的程序员燕双非与严肃的面试官的对话&#xff0c;展示 Java 技术栈下的面试问题&#xff0c;并深入解答其中的技术要点。第一轮面试 …...

Rails控制台集成AI助手:ask_chatgpt Gem的实践指南

1. 项目概述&#xff1a;在Rails控制台里装一个AI助手 如果你是一个Ruby on Rails开发者&#xff0c;并且每天都在跟Rails控制台&#xff08; rails console &#xff09;打交道&#xff0c;那你肯定有过这样的时刻&#xff1a;盯着一段复杂的ActiveRecord查询&#xff0c;或…...

Maya-glTF插件深度解析:现代3D工作流中的glTF 2.0导出技术内幕

Maya-glTF插件深度解析&#xff1a;现代3D工作流中的glTF 2.0导出技术内幕 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 在当今3D内容创作领域&#xff0c;Maya作为行业标准工具&#xff0c…...

长沙定制开发本地生活APP打造城市便民消费场景

随着长沙城市发展&#xff0c;市民对便民消费的需求越来越高&#xff0c;长沙本地生活APP定制开发也逐渐成为本地商家、政企单位布局数字化的重要选择。不同于通用模板APP&#xff0c;长沙定制本地生活APP可根据长沙本地特色&#xff0c;整合餐饮、生鲜、家政、休闲娱乐、政务便…...

京东自动评价工具:3分钟解决购物评价难题的智能助手

京东自动评价工具&#xff1a;3分钟解决购物评价难题的智能助手 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为购物后的评价烦恼吗&#xff1f;每次收到京东的"待评价"提醒&…...

软件设计原则之DIP依赖倒置原则

(DIP) 依赖倒置原则 Dependency Inversion Principle核心原则抽象不应该依赖细节&#xff1b;细节应该依赖于抽象。场景描述在一个应用程序 Application 中需要使用到数据库&#xff0c;比如我们此时需要使用到 Mysql 数据库。Mysql 数据库分别具有连接&#xff0c;断开关闭&am…...