C++中的構造函數
c++中的構造函數分為構造函數,和復制構造函數,相比於構造函數,復制構造函數使用更加方便,快捷。構造函數可以有多個,二復制構造函數只能有一個,因為復制構造函數的參數
只能是當前類的一個對象,參數表是固定的,無法重載,若用戶沒有定義自己的輔助構造函數,系統會自動生成一個復制構造函數,其作用是將參數的之賦予當前的對象.若用戶自己定義了復制構造函數,系統則不會生成默認復制構造函數。用戶自己定義的復制構造函數功能可以自己構造,不一定執行復制的功能。
復制構造函數同構造函數的功能大體相同·,卻又有不同之處,下面介紹復制構造函數在3中情況下的調用
1.當用一個對象去初始化同類的另一個對象時,會引發復制構造函數的調用
以下兩條語句都會導致復制構造函數的調用
Complex c1(c2);
Complex c1=c2;
這兩條語句時等價的,其中第二句是初始化語句,不是賦值語句
下面這一條語句不會調用復制構造函數
Complex c1,c2;
c1=c2;
2.作為形參的對象,使用復制構造函數初始化的 以下語句可以證明 ```
#include<iostream>
using namespace std;
class A{
public:
A(){};//構造函數
A(A&a)//復制構造函數
{
cout<<"Copy constructer called"<<endl;
}
};
void Func(A a)//普通函數
{
}
int main()
{
A b;
Func(b);//此語句相當於是將b復制給Func(a)中的a,導致調用復制構造函數
retur 0;
}
程序運行截圖

3.如果函數返回的是類A的對象,那么函數返回時,類A的復制構造函數會被調用
程序如下
```
#include<iostream>
using namespace std;
class A{
public:
int v;
A(int i){
v=i;
};//構造函數
A(A&a)//復制構造函數
{
cout<<"Copy constructer called"<<endl;
}
};
A a(4);
A Func()//普通函數
{
return a;
}
int main()
{
cout<<Func().v<<endl;//此語句中的Func()是一個類A的對象,但是不是a,只是用a初始化。
return 0;
}
```

##
以上三種情況是比較常見的復制構造函數被調用的例子
歡迎討論,斧正