C++构造函数和析构函数详解

news2024/10/7 0:50:57

一、构造函数

1、概念

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名叫做构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象

2、特征

  1. 函数名与类名相同。
  2. 无返回值
  3. 对象实例化时编译器自动调用对应的构造函数
  4. 构造函数可以重载
  5. 如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义编译器将不再生成。

下面代码构造函数与缺省参数结合,非常实用!

#include<iostream>
using namespace std;
class date
{
private:
	int _year;
	int _month;
	int _day;
public:
    //函数名与类名相同。无返回值
	date(int year = 2023, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Print()
	{
		cout << _year << '-' << _month << '-' << _day;
	}
};

int main()
{
	date a;
	date _a(1, 2, 3);
	a.Print();
	return 0;
}


但此时如果把自己定义的构造函数删除,默认生成构造函数,但是不会自己初始化。

3、默认生成的构造函数,到底有什么用?

处理自定义(回去调用这个成员的默认构造函数),但对于内置类型不确定(看编译器),建议不处理。

比如上面是自定义类型,就会自己调用Stack的默认构造函数

默认构造函数的概念:

  1. 我们不写显示构造函数,编译器默认生成的构造函数,叫默认构造
  2. 无参构造函数也可以叫默认构造
  3. 全缺省也可以叫默认构造

小总结:

内置类型成员不做处理,自定义类型会去调用它的默认构造

所以对于内置类型,还是需要程序员自己去创建构造函数,而对于自定义类型,会自动调用这个成员的默认构造函数,其实还是自己创建的构造函数

  • 内置类型:int/double/……注意指针都是内置类型
  • 自定义类型:class/struct

其实上面的构造函数并不好,对于自定义类型和构造类型区别对待,在C++11中,会支持对内置类型的初始化,在private声明的时候进行初始化。支持声明时给缺省值

总结:

  1. 一般情况下,我们都要自己写构造函数
  2. 内置类型都不处理
  3. 成员都是自定义类型,或者声明时给了缺省值,可以考虑让编译器自己生成构造函数

可以不传参数就调用构造,都可以叫默认构造,这三个函数不能同时存在,只能存在一个

析构函数:

1、概念

与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作

2、特性

  1. 析构函数名是在类名前加上字符~
  2. 无参数无返回值类型
  3. 一个类只能有一个析构函数。若未显示定义,系统会自动生成默认的析构函数。注意析构函数不能重载
  4. 对象生命周期结束时,C++编译系统自动调用析构函数。

3、功能

对象销毁不需要析构函数,对象的销毁靠系统,更本质一点是函数栈帧的销毁,而析构函数的作用是处理动态开辟的空间,比如栈开辟的动态的空间。

我们如果不写析构函数,那系统自动默认生成的析构函数,不会把开辟的指针处理

默认生成析构函数,行为跟构造类似,内置类型成员不做处理,自定义类型成员会去调用他的析构

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

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

相关文章

探索Allure Report:提升自动化测试效率的秘密武器

一.使用 Allure2 运行方式-Python # --alluredir 参数生成测试报告。 # 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)# 生成在线的测试报告 allure serve ./result二.使用 Allure2 运行方式-Ja…

ChineseChess.2023.11.01.03

1 红【马三进四】吃黑车&#xff0c;红方没有将军&#xff0c;黑方进攻 黑方 【 卒4平5】&#xff0c; 将 红帅 红【炮五退七】吃黑【卒5】&#xff0c;解将&#xff0c;不用看&#xff0c;你没棋走 黑【炮4进7】&#xff0c;将红帅&#xff0c;绝杀&#xff0c;位置都被自己卡…

Android四大组件总结

从事安卓开发也有两年多的时间了&#xff0c;从头开始整理下所学的东西&#xff0c;坚持&#xff01;&#xff01;&#xff01; 一、Activity 活动 Activity 用于显示用户界面&#xff0c;用户通过 Activity 交互完成相关操作&#xff1b; 一个 App 允许有多个Activity Activi…

贝锐向日葵亮相阿里云“云栖大会”:独创专利算法赋能全新云桌面

2023年10月31日-11月2日&#xff0c;一年一度的云栖大会如期举办&#xff0c;国产远程连接服务创领者贝锐受邀参与。活动现场&#xff0c;贝锐CTO张小峰进行了分享&#xff0c;宣布贝锐旗下国民级远程控制品牌“贝锐向日葵”与无影展开合作&#xff0c;同时全新的“云桌面”将于…

1360. 日期之间隔几天

1360. 日期之间隔几天 Java代码&#xff1a; 【DateFormat】DateFormat用于实现日期的格式化 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; // 好像已过时class Solution {public int daysBet…

RHCE---shell脚本编程之awk

文章目录 目录 文章目录 前言 一.awk概念 二.工作流程 三.awk执行方式 四.awk 语法结构及案例 纯命令执行脚本 awk命令调用脚本执行 直接awk纯脚本执行 五.记录和域 概念&#xff1a; 六.awk的变量 总结 前言 前文已详细了介绍了文本三剑客的其中两种grep 和 sed 命…

C++查看Class类结构

cl指令 cl test.cpp /d1reportSingleClassLayout 类名 注意。上面指令是d1,1是数字1 &#xff0c; 不是字母l;

深度解析concrt140.dll丢失的5个解决方法,快速搞定dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“concrt140.dll丢失”。这个问题通常会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文将介绍一种有效的解决方法&#xff0c;帮助用户解决concrt140.dll丢失的问题。 一、原…

时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现NGO-VMD北方苍鹰算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 北方苍鹰算法NGO优化VMD&#xff0c;对其分解层数&#xff…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

【HSPICE仿真】输入网表文件(6)用户自定义分析输出(.measure)

.measure语句的基本用法 1. 语句顺序2. 测量参数类型3. Rise, Fall, Delay, and Power Measurements4. FIND 和 WHEN 函数5. Equation Evaluation/Arithmetic Expression6. AVG, EM_AVG, INTEG, MIN, MAX, PP, and RMS基本语法示例 7. 输出文件格式MEASFORMMEASOUTMEASFILEMEAS…

程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!

现在经济压力这么大&#xff0c;但是生活成本还在上升&#xff0c;相信大家都知道“四脚吞金兽”的威力了吧&#xff01;话虽如此&#xff0c;但是生活总得继续&#xff0c;为了家庭的和谐幸福&#xff0c;为了孩子的未来&#xff0c;不少人选择多干几份工作&#xff0c;赚点外…

多态与虚函数、虚函数表、对象的内存模型的思考

我在这就不详细说多态、虚函数是什么了&#xff0c;简单理解为&#xff1a; 1.基类定义虚函数 2.派生类重定义/重写&#xff08;override&#xff09;基类的虚函数 3.基类指针&#xff08;引用&#xff09;指向&#xff08;绑定&#xff09;到派生类对象 4.基类指针&#xff08…

大数据Doris(十五):Doris表的字段类型

文章目录 Doris表的字段类型 一、TINYINT数据类型 二、SMALLINT数据类型 三、INT数据类型

以太网【FPGA】

1物理&#xff1a; 2接线&#xff1a; 信号名 信号类型 对应引脚 备注 sys_clk Input B5 系统晶振输入时钟&#xff0c;频率 50MHz sys_rst_n Input E8 系统复位信号&#xff0c;低有效 eth_rxc Input E17 PHY 输入时钟&#xff0c;频率 125MHz eth_rx_ctl Inpu…

傅里叶分析和小波分析

从傅里叶变换到小波变换&#xff0c;并不是一个完全抽象的东西&#xff0c;可以讲得很形象。小波变换有着明确的物理意义&#xff0c;如果我们从它的提出时所面对的问题看起&#xff0c;可以整理出非常清晰的思路。 下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺…

损失函数(Loss Function)一文详解-聚类问题常见损失函数Python代码实现+计算原理解析

损失函数(Loss Function)一文详解-聚类问题常见损失函数Python代码实现计算原理解析 前言 损失函数无疑是机器学习和深度学习效果验证的核心检验功能&#xff0c;用于评估模型预测值与实际值之间的差异。我们学习机器学习和深度学习或多或少都接触到了损失函数&#xff0c;但…

SuperMap iServer 11i(2023)安全性提升汇总

作者&#xff1a;lisong 目录 账户信息合规度校验规则扩展功能图片验证码登录功能Web服务提供者密码加密数据库密码加密漏洞修复 SuperMap iServer 11i&#xff08;2023&#xff09;产品安全性相关的提升众多&#xff0c;涵盖账户安全、服务安全以及漏洞修复等方面&#xff0c;…

2023杭州·云栖大会:我在云栖看数智中国

目录 模型即服务&#xff08;MaaS&#xff0c;Model as a Service&#xff09;全球首个李白数字展我在云栖看数智中国 云栖之眼、视频云3D渲染、数字人…… 10月31日到11月2日&#xff0c;2023云栖大会在杭州市西湖区云栖小镇火热进行&#xff0c;本次的主题为“ 计算&#xff…

YOLO目标检测——红外多目标检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;自动驾驶、安防监控等数据集说明&#xff1a;红外多目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有行人、汽车、自行车、摩托、消防栓、指示牌、狗等图片标签说明&#xff1a;使用lableimg标注软件标注…