默认成员函数之构造函数,构造函数的特点,创建,调用与对象创建的一语双关,默认构造函数等

内置类型与自定义类型

  1. C++当中的类型的话分为两类:一种就是内置类型/基本类型,就是c语言自带的那些类型基本类型,如int, char, double, 指针(任何类型的指针,因为指针就是地址嘛)等等;
  2. 还有就是自定义类型,用struct, class, union枚举联合等等自定义的类型
  3. 然后对于这个编译器自己生成的构造函数,对于内置类型不做处理;对于自定义类型,会去调用它的默认构造

默认成员函数

  1. 如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数
  2. 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数
    在这里插入图片描述

构造函数(初始化类的实例化对象)

  1. 千万不能把构造函数与析构函数当成普通的函数来对待,他们是特殊的成员函数,并不是普通的函数。
  2. 构造函数的作用就是初始化该类的实例化对象
  3. 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。
  4. ***函数名定死,与类名相同;无返回值,也不需要写void什么的,直接不写,因为是祖师爷的亲儿子;当一个对象被实例化出来之后,编译器自动调用对应的构造函数。***也就是说当一个类的实例化对象一旦被创建出来,直接编译器自动调用初始化函数直接被初始化了。
  5. 有时候我们可能有很多种初始化的方式,就比如说拿数据结构栈来举个例子,初始化的时候,我可能有一串原始数据需要放进去,也有可能什么都不放,可能有多种初始化的方式。这就导致构造函数可以重载。
  6. 但我们自己没有去写显示的构造函数的时候,编译器它会自动的生成一个构造函数。因为构造函数它是自动调用,如果你自己写了构造函数,他就自动调用你的,如果你不写构造函数,他自己也会写一个构造函数,然后去调用。
  7. 然后你去观察一下编译器自己生成的一个构造函数,你会发现它好像什么屁事儿也没干。实际上这个编译器生成的构造函数还是在给你初始化的,只是没有给你初始化成零而已。
  8. 这个编译器自己生成的构造函数,对于内置类型不做处理;对于自定义类型,会去调用它的默认构造默认构造函数对于那些自定义类型的成员变量,是绝对会给你初始化处理的,但是对于内置类型的成员变量不一定会处理,最终还是要取决于编译器,但一般来说是不处理。
  9. 在一般情况下,类有内置类型成员,就需要自己写构造函数,因为如果说你自己不写,然后仅靠编译器自动生成的构造函数,它可能不会给你的内置类型成员初始化。但如果说这个类当中全部都是自定义类型成员,那可以考虑让编译器自己生成构造函数。
  10. 构造函数是支持函数重载的,这边就又需要回归到函数承载的那个问题。当函数重载当中有缺省参数参与进来的时候,有时候两个函数确实是构成了函数重载,但是调用(特别是无参调用)的时候还是会引起歧义。
  11. 在类的构造函数里面可以支持全缺省,半缺省。
  12. 一旦显式定义任何构造函数,编译器将不再生成,如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成

构造函数的特点

  1. 名字就是类名,没有且不写返回值
  2. 实例化对象创建的下一秒构造函数就会自动被调用
  3. 支持函数重载
  4. 你写了就用你的,没写就用我编译器自己的,但我只负责自定义类型的初始化
  5. 在对象整个生命周期内只调用一次
    在这里插入图片描述
    在这里插入图片描述

构造函数的创建(无参,有参,支持函数重载)

  1. 无参构造函数
class A
{
public:
	A()
	{
		a = 10;
		b = 20;
		c = 30;
		d = 'S';
	}
	void Print()
	{
		cout << a << " " << b << " " << c << " " << d << endl;
	}
private:
	int a;
	int b;
	int c;
	char d;
};
  1. 带参构造函数
class A
{
public:
	A(int pa, int pb, int pc, int pd)
	{
		a = pa;
		b = pb;
		c = pc;
		d = pd;
	}
	void Print()
	{
		cout << a << " " << b << " " << c << " " << d << endl;
	}
private:
	int a;
	int b;
	int c;
	char d;
};
  1. 构造函数是可以进行函数重载的,也就是说函数名可以相同,只要参数那边不同就可以。
class A
{
public:
	A(int pa, int pb, int pc, int pd)
	{
		a = pa;
		b = pb;
		c = pc;
		d = pd;
	}
	A()
	{
		a = 10;
		b = 20;
		c = 30;
		d = 'S';
	}
	void Print()
	{
		cout << a << " " << b << " " << c << " " << d << endl;
	}
private:
	int a;
	int b;
	int c;
	char d;
};

构造函数的调用与实例化对象的创建(代码一语双关)

  1. 构造函数调用与普通函数也不一样
  2. 首先构造函数是可以进行函数重载的,也就是说函数名可以相同,只要参数那边不同就可以。
  3. 构造函数函数名 类的实例化对象(有参数就传入参数,没有参数直接分号)
  4. 正是因为类的构造函数它特别特别的怪,它的名字就是与类名一模一样,所以说对于创建类的实例化对象的代码,一方面可以把他看成创建了一个类的实例化对象;另一方面也可以把它看成是一次构造函数的调用(构造函数的调用与普通函数是不一样的,不要以普通函数的视角去看待)
    在这里插入图片描述
  5. 一语双关。
    在这里插入图片描述
    在这里插入图片描述

默认构造函数

  1. 无参的构造函数全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。
  2. 注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。
  3. 我们自己写的不传参就能够调用的构造函数(无参构造函数,全缺省构造函数),我们没写编译器默认生成的构造函数都是默认构造函数。
    在这里插入图片描述

C++11对于创建类的新补丁

  1. C++11的标准发布的时候打了个补丁,但打补丁并不是把之前的语法标准给他改了,可不敢这样。
  2. 在成员声明的时候可以给缺省值,这个就主要针对的是内置类型。
  3. 这个并不是函数里面的那个缺省参数,这边的意思是在类的声明当中就可以直接对那些内置类型的成员变量给一个缺省值。
  4. 但这个并不是初始化,因为这边只是声明,也没有开空间。这边的这个值缺省值,专门给编译器默认生成的构造函数用的。
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker和k8s基础介绍

一 Docker介绍 1.1 docker是什么 Docker 是一个开源项目&#xff0c; 诞生于 2013 年初&#xff0c;最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会&#xff0c;遵从了 Apache 2.0协议&#xff0c; 项目代码在…

FFmpeg PCM 编码 AAC

1. 概要说明与流程图 1.1 概要: 1) FFmpeg 已经废弃了 AV_SAMPLE_FMT_S16 格式 PCM 编码 AAC,也就是说如果使用 FFmpeg 自带的 AAC 编码器,必须做音频的重采样(重采样为:AV_SAMPLE_FMT_FLTP),否则AAC编码是失败的。 2) 传输 PCM 数据时,采取截取缓存机制,解决接收数据包…

【无人机】回波状态网络(ESN)在固定翼无人机非线性控制中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ChatGPT情商很高,但并不适合当搜索引擎

微软和谷歌正急于使用大型语言模型技术来强化搜索引擎。但有充分的理由认为&#xff0c;相比于提供事实性信息&#xff0c;这项技术更适合作为人们情感上的伴侣。 美媒评论称&#xff0c;目前基于大型语言模型的人工智能工具&#xff0c;例如ChatGPT&#xff0c;更擅长共情而不…

城市“一网统管”平台—智慧平安小区的场景应用

随着城市建设进程的不断加快&#xff0c;关于城市的智能化治理需求也随之增多。在国家发布的“十四五”规划中&#xff0c;已经明确指出&#xff0c;推进新型城市建设&#xff0c;推行城市运行一网统管。作为推动城市治理体系和治理能力现代化的重要探索&#xff0c;“一网统管…

Word中截取部分内容并保存为jpg图片的方法

private void button1_Click(object sender, EventArgs e) { var appWord new Microsoft.Office.Interop.Word.Application(); var doc new Microsoft.Office.Interop.Word.Document(); object oMissing System.Reflection.Missing.Value;//这个是什么东西&#xff0c;我始终…

基于云计算技术的B/S架构云HIS 云HIS 云HIS系统

传统的HIS经历了20多年的建设&#xff0c;已经从单机版发展到局域网的版本&#xff0c;更被深入应用到医院的各项业务活动&#xff0c;成为医院必不可缺的基础设施平台&#xff0c;724小时不间断地支撑医院运行。因此医院都十分重视信息化建设。随着医改的不断推进和医疗行业的…

Metasploit Framework-安全漏洞检测工具使用

一款开源的安全漏洞检测工具&#xff0c;简称MSF。可以收集信息、探测系统漏洞、执行漏洞利用测试等&#xff0c;为渗透测试、攻击编码和漏洞研究提供了一个可靠平台。 集成数千个漏洞利用、辅助测试模块&#xff0c;并保持持续更新。 由著名黑客、安全专家H.D. Moore主导开发…

随机模型预测控制(SMPC)——考虑概率约束(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 模型预测控制&#xff08;MPC&#xff09;又称为滚动时域控制和滚动时域控制&#xff0c;是一种强有力的工程应用技术。MPC的价…

信息安全技术 健康医疗数据安全指南 付下载地址

声明 本文是学习GB-T 39725-2020 信息安全技术 健康医疗数据安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 数据使用管理办法示例 第一章 总则 第一条 为规范数据使用流程&#xff0c;根据国家相关法律法规及相关规定&#xff0c;特制定本…

YOLOv5实时检测调用usb摄像头 [ jetson nano -Ubuntu18.4 - Astra pro相机 ]

在基于rosmaster小车的jetson nano主板部署yolo v5目标检测网络的时候发现无法打开摄像头Astra pro进行实时监测&#xff0c;所以记录一下解决方法&#xff1a; 0.确认摄像头可用 首先先参考我上一篇博客所记录的方法打开USB摄像头&#xff1a; Jetson Nano打开USB摄像头&…

MySQL(二)

MySQL - 常用命令 1. 常用命令2. 操作数据库2.1 操作数据库2.2 创建数据库表2.3 数据库存储引擎2.4 修改数据库(ALTER<改变>) 3. MySQL数据管理3.1 外键3.2 DML语言1. 添加 insert2. 修改 update3. 删除 delete 4. DQL查询数据4.1 基础查询4.2 条件查询4.3 分组查询4.4 连…

生成式AI火爆全球,你是否已经做好了准备?

2023年&#xff0c;随着ChatGPT的火爆全球&#xff0c;生成式AI也引发了各界人士的广泛关注。一时间&#xff0c;从国际科技巨头到国内人工智能企业&#xff0c;几乎所有我们耳熟能详的科技公司&#xff0c;都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

HTML+CSS+JS 学习笔记(三)———Javascript(中)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;三&#xff09;———Javascript(上) &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 JavaScrip…

yolov5-fastapi-demo更换中文标签

本章是基于yolov5-fastapi-demo项目的更改 WelkinU/yolov5-fastapi-demo: FastAPI Wrapper of YOLOv5 (github.com) 首先&#xff0c;因为训练的时候设置的标签是英文&#xff0c;换成中文要重新训练&#xff0c;而且使用中文训练也很繁琐要改很多东西&#xff0c;因此可以直…

获奖名单公布|香港BlockBooster x Moonbeam黑客松圆满收官

Moonbeam基金会赞助的”Into the Socialverse”主题的BlockBooster黑客松于近日落幕。该活动由BlockBooster、OKX、Gitcoin和OxU香港区块链俱乐部联合主办&#xff0c;共有22个开发团队参赛。经过多位评委的严格筛选&#xff0c;3支优秀团队脱颖而出&#xff0c;获得Moonbeam基…

汽车充电桩检测设备TK4860C交流充电桩检定装置

TK4860C是一款在交流充电桩充电过程中实时检测充电电量的标准仪器&#xff0c;仪器以新能源车为负载&#xff0c;结合宽动态范围测量技术、电能ms级高速刷新等技术&#xff0c;TK4860C实现充电全过程的累积电能精准计量&#xff0c;相比于传统的预设检定点的稳态计量&#xff0…

为什么建企业网站对企业来说非常重要?

随着互联网的飞速发展&#xff0c;建企业网站已经成为了企业重要的一部分。企业网站是企业与外界沟通的重要渠道&#xff0c;对于企业的品牌形象、市场推广和销售业绩都有着不可替代的作用。本文将从以下几个方面&#xff0c;阐述为什么建企业网站对企业来说非常重要&#xff0…

2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解

写在前面 以下代码&#xff0c;目前均可通过民间OJ数据&#xff08;dotcpp & New Online Judge&#xff09;&#xff0c; 两个OJ题目互补&#xff0c;能构成全集&#xff0c;可以到对应链接下搜题提交&#xff08;感谢OJ对题目的支持&#xff09; 如果发现任何问题&…

巧用千寻位置GNSS软件|如何快速完成道路桥涵放样

道路桥涵放样主要解决道路施工中正交、斜交涵洞的测量&#xff0c;正交涵洞放样是中心线的定线放样&#xff1b;斜交涵洞放养是涵洞中心线与线路成一固定夹角的情况下的放样。 那么如何运用千寻位置GNSS软件实现道路桥涵放样呢&#xff1f;下面为各位一一介绍。 点击【测量】-&…