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

news2024/11/15 12:42:24

内置类型与自定义类型

  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. 但这个并不是初始化,因为这边只是声明,也没有开空间。这边的这个值缺省值,专门给编译器默认生成的构造函数用的。
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

某安全对抗行走APP逆向分析

1.定位url 抓包: https://api5.xxxx.com/xxx-rest-service/message/fun_getnearby 看一下参数: opentime:时间戳 reqdata:base64编码 sign 未知,需要解密 # -*- coding: utf-8 -*- # @Author : Codeooo # @Time : 2022-10-14import frida, sysm199a = "&qu…

learn_C_deep_5 (语句和表达式的概念、if语句的多种语法结构、C语言有没有布尔类型、“零值”的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法&#xff08;环境vs&#xff09; if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 ​编辑 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少&#xff1f; _Bool原码 BOOL、TRUE、…

IT_开发提测标准规范

背景 公司 IT 规模小&#xff0c;开发提测质量差&#xff0c;流程不规范&#xff0c;导致测试任务重&#xff0c;于是推行 &#xff1a;IT_开发提测标准规范&#xff0c;正文如下&#xff1b;拟定开发提测标准规范后&#xff0c;测试与项目经理内部评审后&#xff0c;发至IT群…

低相位噪声链路调试分析

上图为原始状态,与项目结项评审指标差不多,确实存在几个噪声比较差的点。 频率分布大约在几Hz,20K,50K左右。 由于测试时由子卡进行输出,采用直接进行直接输出,以看出,明显的尖峰已经没有了,只剩下20K左右的尖峰,但是总体来说,效果很差,可能时单端输出的问题。试…

【SVN已解决】svn下载成功图标不显示解决方法

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

【小技巧】word文档编辑技巧(一)

文章目录 一、显示显示导航显示所有字符 二、格式格式-三级目录格式-文本格式-图格式-表格式-公式格式-参考文献 三、小技巧交叉引用连续交叉引用表/图目录等自动更新分节符设置页眉/页码word转pdf带导航 一、显示 显示导航 开启导航&#xff1a;视图->显示框->导航窗格…

《春琴抄》庭有枇杷树,今已亭亭如盖矣~

《春琴抄》庭有枇杷树&#xff0c;今已亭亭如盖矣~ 谷崎润一郎&#xff08;1886年7月24日&#xff5e;1965年7月30日&#xff09;&#xff0c;日本近代小说家&#xff0c;唯美派文学主要代表人物之一&#xff0c;《源氏物语》现代文的译者。 代表作有《刺青》《春琴抄》《细雪》…

客户体验的重要性和企业发展的紧密联系

近年来&#xff0c;随着企业数字化转型的加速&#xff0c;客户服务的意义越来越被人们所重视。客户服务的质量不仅直接影响到客户满意度和忠诚度&#xff0c;而且会间接影响到企业的品牌口碑和市场竞争力。然而&#xff0c;目前市面上的很多企业帮助中心搭建平台&#xff0c;可…

【油猴脚本】ChatGPT 智能 Prompts 提示词助手

chatGPT 插件脚本 中文 Prompt 训练对话框 ChatGPT 智能 Prompts 可以为你带来更好的使用体验助你训练好用的ChatGPT&#xff1a;添加快捷指令&#xff08;prompts&#xff09;新增&#xff1a;论文专家角色、支持自动发送、固定智能助手…还有更多需求可以到仓库Issues里发起…

Qt Quick - ScrollView

Qt Quick - ScrollView 使用总结 一、概述二、使用四、分级五、滚动条控制六、触摸vs.鼠标交互七、美化 一、概述 ScrollView 为用户定义的内容提供滚动功能。类似QScrollArea 的功能。 二、使用 第一个例子展示了ScrollView的最简单用法。 ScrollView {width: 200height: …

本周大新闻|MR头显或成WWDC23重头戏;PICO 4 Pro本周开售

本周XR大新闻&#xff0c;AR方面&#xff0c;彭博社Mark Gurman确认XR头显将成为WWDC重头戏&#xff0c;同时将兼容iPad应用&#xff1b;Inprentus将发布用于AR光波导方案的闪耀光栅工艺&#xff1b;富采展示0.12英寸蓝光Micro LED&#xff1b;锐思华创公布多层光波导PGU&#…

大数据技术之Kafka集成

一、集成Flume 1.1 Flume生产者 &#xff08;1&#xff09;启动Kafka集群 zkServer.sh startnohup kafka-server-start.sh /opt/soft/kafka212/config/server.properties & &#xff08;2&#xff09;启动Kafka消费者 kafka-console-consumer.sh --bootstrap-server 192…

Django框架之定义模型和表迁移

django3.0 定义表模型并通过定义好的模型实现源代码创建数据表。 概述 模型是一个用于表示数据的Python类&#xff0c;包含基本的数据字段和行为。 通常一个模型就代表一张数据库表。 模型继承自django.db.models.Model&#xff0c;模型的每一个属性代表一个数据的字段。 定…

SLAM面试笔记(2) - ORB-SLAM2

目录 1 四叉树实现特征点均匀化分布 2 Bow词袋模型 2.1 什么是词袋&#xff1f; 2.2 词袋在ORB-SLAM2中的作用 2.3 离线训练字典树流程 3 ORB-SLAM的跟踪方法 3.1 恒速模型跟踪 3.2 重定位跟踪 3.3 参考关键帧跟踪 持续更新中... 1 四叉树实现特征点均匀化分布 参考…

SpringBoot实战(十六) 集成Hystrix

目录 一、简介1.Hystrix 的定义&#xff1f;2.Hystrix 的用处&#xff1f;3.Hystrix 的三种状态&#xff1f;4.Hystrix 解决什么问题&#xff1f;5.Hystrix 的设计原理&#xff1f;6.Hystrix 的实现原理&#xff1f; 二、集成 Hystrix1.Maven 依赖2.application.yml简易版&…

【CSS3】CSS3 伪元素选择器 ( 伪元素选择器语法简介 | 伪元素选择器权重计算 | 代码示例 )

文章目录 一、CSS3 伪元素选择器二、CSS3 伪元素选择器权重二、代码示例 一、CSS3 伪元素选择器 CSS3 伪元素选择器 : ::before 选择符 : 在 指定的标签元素内部的 前面 插入内容 ;::after 选择符 : 在指定的标签元素内部的 后面 插入内容 ; CSS3 伪元素选择器注意事项 : con…

QT里的网络通信简介

QTcpSocket类简介 QTcpSocket类提供了一个TCP套接字。TCP&#xff08;传输控制协议&#xff09;是一种可靠的、面向流的、面向连接的传输协议。它特别适合数据的连续传输。QTcpSocket是QAbstractSocket的一个子类&#xff0c;它允许您建立TCP连接和传输数据流。有关详细信息&a…

连接器信号完整性仿真教程 二

在连接器信号完整性仿真教程一中Step by Step演示了如何进行连接器信号完整性仿真&#xff0c;看完这片博文后应该可以做类似产品的仿真。如果说&#xff0c;看了这篇博文就学会了连接器信号完整性仿真&#xff0c;那就有点过了。有人也许会说信号完整性仿真难学&#xff0c;不…

利用GPT2 预测 福彩3d预测

使用GPT2预测福彩3D项目 个人总结彩票数据是随机的,可以预测到1-2个数字,但是有一两位总是随机的 该项目紧做模型学习用,通过该项目熟练模型训练调用生成过程. 福彩3D数据下载 https://www.17500.cn/getData/3d.TXT data数据格式 处理后数据格式 每行 2023 03 08 9 7 3 训…

Java入门教程||Java 继承||Java 重写(Override)与重载(Overload)

Java 继承 继承是所有 OOP 语言和 Java 语言不可缺少的组成部分。 继承是 Java 面向对象编程技术的一块基石&#xff0c;是面向对象的三大特征之一&#xff0c;也是实现软件复用的重要手段&#xff0c;继承可以理解为一个对象从另一个对象获取属性的过程。 如果类 A 是类 B …