C++Note 构造函数和析构函数
对象的初始化和清理
对象的初始化和清理工作是编译器强制要求做的事情
因此如果不提供构造和析构函数,编译器会提供构造和析构函数自动调用 内容为空
**构造函数:在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用(对类中变量初始化,默认为0,保证程序流畅稳定)
**析构函数:在于对象销毁前系统自动调用,执行一些清理工作
构造函数语法:
类名(){}
1.构造函数,没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
1 #include <iostream> 2 using namespace std; 3 4 class Person 5 { 6 public: 7 //构造函数 8 //没有返回值 不用写void 9 //函数名 与类名相同 10 //构造函数可以有参数 可以发生重载 11 //创建对象的时候 构造函数会自动调用 且只调用一次 12 Person() 13 { 14 cout << "Person构造函数调用" << endl; 15 //不写构造函数 编译器会自动写 但是内容为空 16 } 17 //析构函数 进行清理的操作 18 //没有返回值 不写void 19 //函数名与类名相同 在类名前 加~ 20 //析构函数不可以有参数 不可以重载 21 //对象在销毁前 会自动调用析构函数 且只会调用一次 22 ~Person() 23 { 24 cout << "Person析构函数调用" << endl; 25 } 26 }; 27 //构造和析构都是必须有的实现,如果程序员不提供,编译器会提供一个空实现 28 void test() 29 { 30 Person p;//在栈上的数据 test()执行完毕后,释放这个对象 31 } 32 int main() 33 { 34 test();//输出:Person构造函数调用 Person析构函数调用 35 //p只声明 未调用函数Person() 但系统自己调用了构造函数 36 Person p1;//输出:Person构造函数调用 没有*看到*析构 37 //因为Main中的p1 在控制台关闭时才会释放 而test()是程序执行完就释放 所以会*看到* 38 system("pause");//这行后释放p1 39 return 0; 40 }
析构函数语法:
~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前加上符号 ~
3.析构函数不可以有参数,因此不可以发生重载
4.程序在对象销毁前会自动调用析构函数,无须手动调用,而且只会调用一次
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)