【C/C++】构造函数与析构函数

这篇具有很好参考价值的文章主要介绍了【C/C++】构造函数与析构函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

【C/C++】构造函数与析构函数

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


在理解【类和对象的基本概念】后,下面介绍两个在面向对象编程中用于的特殊成员函数——构造函数析构函数

下面创建一个简单的CPeople类用作本文的展开:

#include <iostream>
#include <string>
using namespace std;
class CPeople
{
public:
	string m_strName;
	int m_nAge;
	bool m_bSex;
	string m_strNote;
	void show()
	{
		cout << "姓名: " << m_strName << " 年龄: " << m_nAge << " 性别: " << m_bSex << endl;
		cout << "简介: " << m_strNote << endl;
	}
	void doing()
	{
		cout << "-->" << m_strName << "正在学习C++" << endl;
	}
};
int main()
{
	CPeople peo;
	peo.m_nAge = 19;
	peo.m_strName = "天喜Studio";
	peo.m_bSex = 1;
	peo.m_strNote = "CSDN上分享知识";
	peo.show();
	peo.doing();
	return 0;
}

通常在定义变量时要初始化,而在定义类对象时,成员属性并没有得到初始化,如何对类成员进行初始化呢?

C++对此提供了一种特殊的成员函数——析构函数

一、构造函数

构造函数: 其作用是用来初始化类成员属性。

空类中存在一个默认的无参数的构造,函数名为当前类名无返回值(并不是返回空void,而是没有返回值!)

书写格式如下:

class CTest		//类名
{
	CTest()		//构造函数名与类名相同,默认无参数
	{
		//默认无参构造
	} 
};

构造函数并不需要我们手动调用,在定义对象的时候会自动调用,默认的无参构造是编译器提供的

函数体代码为空,所以在定义对象时虽然调用了,但并没有这正给成员初始化

所以需要我们手动重构构造函数,进行初始化的成员属性写在构造函数体内就可以在程序执行时被初始化

【C/C++】构造函数与析构函数

CPeople类中添加构造函数:

CPeople()
{
	m_strName = "天喜Studio";
	m_nAge = 19;
	m_bSex = 1;
	m_strNote = "CSDN上分享知识";
}

【C/C++】构造函数与析构函数

可以使用不同的参数列表创建多个构造函数,他们构成函数重载,重构的构造函数可以指定参数来符合我们需要的初始化过程。

	CPeople()
	{
		m_strName = "天喜Studio";
		m_nAge = 19;
		m_bSex = 1;
		m_strNote = "CSDN上分享知识";
	}
	CPeople(int id)
	{
		m_strName = "CoCo";
		m_nAge = 20;
		m_bSex = 0;
		m_strNote = "这是一个带参构造函数例子";
	}

在主函数中,如果要调用带参的构造函数,在定义对象时指定,就会根据参数的类型数量自动匹配对应的构造

int main()
{
	CPeople peo;
	peo.show();
	peo.doing();

	CPeople peo2(2);
	peo2.show();
	peo2.doing();
	return 0;
}

【C/C++】构造函数与析构函数

只要重构了任何的构造函数,编译器将不会再提供那个默认的无参构造了
定义多个对象可能会执行不同的构造,但一个对象最终只能执行其中一个构造

如果在类中使用new在堆区给类中的成员创建了额外的内存空间,应该在何时进行delete呢?

char* node = new char[20] {'a'};

下面介绍用来回收类中成员申请额外空间的特殊成员函数——析构函数

二、析构函数

析构函数:与构造函数相对应的析构函数,其作用是回收类中成员申请的额外空间而不是对象本身!

空类中存在一个默认的析构函数,函数名为~类名,无返回值,无参数。

书写格式如下:

class CTest		//类名
{
	~CTest()	//构造函数名与类名相同,无参数!
	{ 
		//默认析构函数
	} 
};

析构函数在对象的生命周期结束的时候,自动调用,编译器提供的默认析构函数函数体代码也为空我们可以手动重构,一旦重构,编译器就不会再提供那个默认析构了,与构造不同的是析构函数只允许存在一个!

CPeople类中添加析构函数:

	~CPeople()
	{
		if (node)
		{
			delete[]node;
			node = nullptr;
		}
	}

注:析构在真正回收对象内存空间之前去调用,额外的空间回收完后,才真正回收对象内存空间。


结语

构造函数和析构函数确保了对象的正确初始化和清理,能够提高程序的可靠性和效率(✿◠‿◠)

(在后面文章提到静态成员变量时再介绍构造函数的初始化参数列表

【C/C++】构造函数与析构函数

本文完整代码:

#include <iostream>
#include <string>
using namespace std;
class CPeople
{
public:
	string m_strName;
	int m_nAge;
	bool m_bSex;
	string m_strNote;
	char* node;
	void show()
	{
		cout << "姓名: " << m_strName << " 年龄: " << m_nAge << " 性别: " << m_bSex << endl;

		cout << "简介: " << m_strNote << endl;
	}
	void doing()
	{
		cout << "-->" << m_strName << "正在学习C++" << endl;
	}
	CPeople()
	{
		m_strName = "天喜Studio";
		m_nAge = 19;
		m_bSex = 1;
		m_strNote = "CSDN上分享知识";
	}
	CPeople(int id)
	{
		m_strName = "CoCo";
		m_nAge = 20;
		m_bSex = 0;
		m_strNote = "这是一个带参构造函数例子";
		node = new char[20]{'a'};
	}
	~CPeople()
	{
		if (node)
		{
			delete[]node;
			node = nullptr;
		}
	}
};
int main()
{
	CPeople peo;
	peo.show();
	peo.doing();

	CPeople peo2(2);
	peo2.show();
	peo2.doing();
	return 0;
}

【C/C++】构造函数与析构函数文章来源地址https://www.toymoban.com/news/detail-500053.html

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

到了这里,关于【C/C++】构造函数与析构函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

     个人主页:北·海  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C/C++ 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 目录 构造函数有什么作用? 构造函数有什么特点 构造函数的种类 一.默认构造函数 1.什么是

    2024年02月09日
    浏览(45)
  • <c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 从零开始的 c++ 之旅 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪 c++ 面向对象三大特性: 封装,继承,多态 。通过本文我们将了解什么是类的

    2023年04月20日
    浏览(52)
  • Roscpp中构造函数与析构函数及在无人机串口通信应用

    构造函数 作用:初始化,在创建对象时会自动调用,有点像Python中的 __init__ 方法 特点:命名为 class命名 ,在public中声明。 析构函数 作用:完成释放前的一些清理工作。 特点:命名为 ~+class命名 ,在public中声明。 调用顺序 栈的顺序,先构造的后析构。 ROScpp中在include文件

    2024年01月21日
    浏览(46)
  • 【C++初阶】类和对象——构造函数&&析构函数&&拷贝构造函数

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++头疼记 ========================================================================= 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性 析构函数 概念 析构函数特性 拷贝构

    2024年02月06日
    浏览(57)
  • C++ 类和对象(二)构造函数、析构函数、拷贝构造函数

            本文将介绍类的6个默认成员函数中的构造函数、析构函数和拷贝构造函数,赋值重载和取地址重载涉及运算符重载的知识,将在下篇讲解。所谓默认成员函数,也就是每个类都有的成员函数,我们可以显式定义这些函数,否则,编译器会自动生成它们。 目录 前言

    2024年02月09日
    浏览(46)
  • C++ 类构造函数 & 析构函数

    类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。 下面的实例有助于更好地理解构造函数的概念: 当上面的代码

    2024年01月17日
    浏览(55)
  • 【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

       🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:   目录 类的6个默认成员函数 构造函数 特性  析构函数 特性  析构的顺序 拷贝构造函数 特性 常引用      💬 hello! 各位铁子们大家好哇。              今日更新了类与对象的构造函数、

    2024年02月21日
    浏览(46)
  • C++:构造方法(函数);拷贝(复制)构造函数:浅拷贝、深拷贝;析构函数。

    1.构造方法(函数) 构造方法是一种特殊的成员方法,与其他成员方法不同: 构造方法的名字必须与类名相同; 无类型、可有参数、可重载 会自动生成,可自定义 一般形式:类名(形参); 例: Stu(int age); 当用户没自定义构造方法时,系统将会执行默认构造方法,当用户自定义一个

    2024年02月11日
    浏览(47)
  • ⚡【C++要笑着学】(7) 默认成员函数:构造函数 | 析构函数 | 拷贝构造函数

    🔥 订阅量破千的火热 C++ 教程 👉 火速订阅 《C++要笑着学》   🔥 CSDN 累计订阅量破千的火爆 C/C++ 教程的 2023 重制版,C 语言入门到实践的精品级趣味教程。 了解更多: 👉  \\\"不太正经\\\" 的专栏介绍  ← 试读第一章 订阅链接: 🔗 《C语言趣味教程》 ← 猛戳订阅!   本篇

    2024年02月07日
    浏览(67)
  • 类的构造函数和析构函数

    构造函数是类的入口函数 析构函数是类的销毁函数 a、构造函数默认是public类型的,如果定义private则定义外部不能进行对象的创建,所以只能是公有函数 b、构造函数是入口函数,所以可以进行参数的初始化,可以对部分或全部的函数进行初始化操作 c、构造函数是可以有多

    2024年01月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包