Loading... ### 构造函数和析构函数的概述 构造函数和析构函数,这两个函数会被编译器<span style='color:#A52A2A'>**自动调用**</span>,构造函数完成对象的初始化动作,析构函数在对象结束的时候完成<span style='color:#A52A2A'>**清理工作**</span>。 <div class="tip inlineBlock warning"> 注意:对象的初始化和清理工作是编译器强制我们要做的事情,即使你不提供初始化操作和清理操作,编译器也会给你增加<span style='color:#A52A2A'>**默认的操作**</span>,只是这个默认初始化操作不会做认识事情(空函数)。 </div> - 构造函数:实例化对象的时候系统自动调用 - 析构函数:对象释放的时候系统自动调用 ### 构造和析构的定义 <div class="tip inlineBlock success"> 构造函数语法: 构造函数<span style='color:#A52A2A'>**函数名**</span>和<span style='color:#A52A2A'>**类名**</span>相同,没有返回类型,连<span style='color:#A52A2A'>**void**</span>都不能有,但可以有参数。 </div> <div class="tip inlineBlock success"> 析构函数语法: 析构函数<span style='color:#A52A2A'>**函数名**</span>是在类名前加“~”组成,没有返回类型,同样<span style='color:#A52A2A'>**void**</span>也没有,不能重载。 </div> 案例: ```cpp #include<iostream> using namespace std; class Date { public: int num; //构造函数(无参的构造函数) Date() { num=0; cout<<"无参的构造函数"<<endl; } //构造函数可以重载 (有参) Date(int n) { num=n; cout<<"有参的构造函数"<<endl; } //析构函数 ~Date() { cout<<"析构函数"<<endl; } }; void test() { //类实例化对象,系统自动调用构造函数 Date ob; //结束test函数,ob类系统自动释放调用析构函数 } int main(int argc,char* argv[]) { test(); return 0; } ``` ### 构造函数分类以及调用 **1、构造函数分类:** - 按参数类型:分为<span style='color:#A52A2A'>**无参**</span>构造函数和<span style='color:#A52A2A'>**有参**</span>构造函数 - 按类型分类:<span style='color:#A52A2A'>**普通**</span>构造函数和<span style='color:#A52A2A'>拷贝**</span>构造函数(复制构造函数) **2、构造函数的调用** ```cpp #include<iostream> using namespace std; class Date { public: int num; //构造函数(无参的构造函数) Date() { num=0; cout<<"无参的构造函数 "<<num<<endl; } //构造函数可以重载 (有参) Date(int n) { num=n; cout<<"有参的构造函数 "<<num<<endl; } //析构函数 ~Date() { cout<<"析构函数 "<<num<<endl; } }; void test() { //一、无参构造 //调用无参构造 或 默认构造(隐式调用构造函数) Date ob1; //调用无参构造(显示调用) Date ob2=Date(); //二、有参构造 //调用有参构造(隐式构造) Date ob3(10);// == ob3.Data(10); //调用有参构造(显示调用) Date ob4=Date(20); //三、隐式转换 //隐式转换的方式 调用有参构造(针对于 只有一个数据成员,我们只有一个num) [尽量别用] Date ob5=30;// == Data ob5(30); //四、匿名对象 //就是没有名字的对象。当前语句结束,域名对象立即释放 Date(40); cout<<"这里已经释放了"<<endl; } int main(int argc,char* argv[]) { test(); return 0; } ``` 最后修改:2021 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏