Loading... 默认情况下,c++编译器至少为我们写的类增加3个函数: 1. 默认构造函数(无参,函数体为空) 2. 默认析构函数(无参,函数体为空) 3. 默认拷贝构造函数(对类中非静态成员属性简单拷贝) 如果用户定义拷贝构造函数,c++不会再提供任何默认构造函数,如果用户定义了普通构造(非拷贝),c++不在提供默认无参构造,但是会提供默认拷贝构造 # 1、如果用户提供了<span style='color:#A52A2A'>有参构造</span>将<span style='color:#A52A2A'>屏蔽</span>系统的<span style='color:#A52A2A'>默认构造函数</span> ```cpp Data ob1; //Error ``` ```cpp #include<iostream> using namespace std; class Data { public: int num; public: //构造函数(有参构造) Data(int n) { num=n; cout<<"有参构造 "<<num<<endl; } //析构函数 ~Data() { cout<<"析构函数 "<<num<<endl; } }; void test() { // 调用无参构造 Data p; // 有参构造 Data p(10); } int main() { test(); system("pause"); return 0; } ``` ![](https://blog.fivk.cn/usr/uploads/2021/07/2301793721.png) # 2、如果用户提供了有参构造 <span style='color:#A52A2A'>不会屏蔽</span> 系统的默认拷贝函数 ```cpp Data ob1(10); Data ob2 =ob1; ob2.num==10; ``` ```cpp #include<iostream> using namespace std; class Data { public: int num; public: //构造函数(有参构造) Data(int n) { num=n; cout<<"有参构造 "<<num<<endl; } //析构函数 ~Data() { cout<<"析构函数 "<<num<<endl; } }; void test() { // 有参构造 Data p(10); cout<<"p.num = "<<p.num<<endl; } int main() { test(); system("pause"); return 0; } ``` # 3、如果用户提供了<span style='color:#A52A2A'>拷贝构造函数</span> 将屏蔽系统的默认构造函数函数和默认拷贝构造函数 ```cpp Data ob1; //Error ``` ```cpp #include<iostream> using namespace std; class Data { public: int num; public: //构造函数(有参构造) Data(int n) { num=n; cout<<"有参构造 "<<num<<endl; } //析构函数 ~Data() { cout<<"析构函数 "<<num<<endl; } //拷贝构造函数 Data(const Data &ob) { cout<<"拷贝构造函数"<<endl; } }; void test() { //默认构造 //Data ob1; //Errot // 有参构造 Data p(10); cout<<"p.num = "<<p.num<<endl; //拷贝构造 Data ob2 = p; } int main() { test(); system("pause"); return 0; } ``` <div class="tip inlineBlock success"> 总结: 对于构造函数:用户要实现无参构造、有参构造、拷贝构造、析构函数。 </div> 最后修改:2021 年 08 月 02 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏