C++学习Day03之构造函数和析构函数

目录

  • 一、程序及输出
    • [1.1 构造函数](#1.1 构造函数)
    • [1.2 析构函数](#1.2 析构函数)
    • [1.3 构造和析构必须要声明在全局作用域](#1.3 构造和析构必须要声明在全局作用域)
  • 二、分析与总结

一、程序及输出

1.1 构造函数

构造函数

没有返回值 不用写void

函数名 与 类名相同

可以有参数 ,可以发生重载

构造函数 由编译器自动调用一次 无须手动调用

创建的时候调用

c 复制代码
#include<iostream>
using namespace std;
class Person
{
public: //构造和析构必须要声明在全局作用域
	Person()
	{
		cout << "Person的构造函数调用" << endl;
	}
		Person(int a)
	{
		cout << "Person的(int a)构造函数调用" << endl;
	}
}
void test01()
{
	Person p;
}

int main(){
	test01();
	Person p2(2);
	system("pause");
	return EXIT_SUCCESS;
}	

输出:

1.2 析构函数

析构函数

没有返回值 不用写void

函数名 与类名相同 函数名前 加 ~

不可以有参数 ,不可以发生重载

析构函数 也是由编译器自动调用一次,无须手动调用

释放的时候调用

c 复制代码
#include<iostream>
using namespace std;

class Person
{
public:
    Person()
	{
		cout << "Person的构造函数调用" << endl;
	}
	
	Person(int a)
	{
		cout << "Person的(int a)构造函数调用" << endl;
	}
	~Person()
	{
		cout << "Person的析构函数调用" << endl;
	}
}
void test01()
{
	Person p;
}

int main(){
	test01();
	Person p2(2 );
	system("pause");
	return EXIT_SUCCESS;
}

输出:可以看到test01()函数结束后局部变量p被释放p2则是在程序结束后释放

1.3 构造和析构必须要声明在全局作用域


二、分析与总结

构造函数和析构函数是 C++ 中特殊的成员函数,它们分别用于对象的初始化和清理工作。下面是对构造函数析构函数的概括总结:

构造函数(Constructor):

构造函数是一种特殊的成员函数,其名称与类名相同,没有返回类型(包括 void)。

构造函数在创建对象时被自动调用,用于初始化对象的数据成员。

构造函数可以重载,即可以定义多个具有不同参数列表的构造函数,称为重载构造函数。

如果没有定义构造函数,编译器会自动生成默认构造函数,用于执行成员变量的默认初始化。

构造函数可以进行初始化列表初始化成员变量,也可以在函数体内进行初始化。
析构函数(Destructor):

析构函数是一种特殊的成员函数,其名称以波浪号(~)加上类名构成,没有返回类型(包括 void)。

析构函数在对象生命周期结束时自动调用,用于清理对象所占用的资源,例如释放动态分配的内存、关闭文件等。

如果没有定义析构函数,编译器会自动生成默认析构函数,用于执行成员变量的清理工作。

在类中可以只有一个析构函数,且不能重载。

相关推荐
shada4 分钟前
Boost.Process v2 在旧内核上报 `assign: Bad file descriptor`
c++
2601_9499506315 分钟前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
别动我齐刘海34 分钟前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
朝朝辞暮i1 小时前
C++第 2 课
c++
代码中介商2 小时前
C++ 预约系统实战(三):服务端实现——libevent 事件驱动与业务路由
c++·json·c/s
布莱克6053 小时前
C++中的内存分区详解
c++
水云桐程序员3 小时前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
All for pursuit.3 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
三克的油4 小时前
java-学习1
java·开发语言·学习
j7~4 小时前
【C++微服务项目开发脚手架】(接口篇一)gflags + gtest + spdlog 接口学习笔记
c++·学习·gtest·项目开发·spdlog·gflags·c++项目微服务开发脚手架