Time(int a,int b)
:x1(a),x2(b) //初始化x1 x2 調用的是(可能是複製,要看a的類型是否與x1相同)構造函式 這樣初始化在Time的對象構造完成之前
{
x1=a; //這樣的方式 Time的對象已經構造起來了
x2=b;
}
引用:“如int a(3);和int a=3;一樣都是將a初始化為3.我覺得int a(3);應該調用的int類的複製構造函式。”
可以這么理解 但實際上內部類型是沒有這些構造函式的。C++為了方便讓它們支持這樣的操作
如果x1,x2和a,b的類型一樣,是不是調用的複製構造函式。那不一樣的時候是如何調用的呢。
你說內部類型沒有複製構造函式。那他是怎么實現int a(3)的呢。
int和其他類型不能被看做和自定義類一樣的類嗎!還是他們比較特殊。
像自定義一樣 都調用(默認)複製構造函式
自定義類不顯示定義複製構造函式時,系統會自動生成一個默認的複製構造函式
int的類型你也可以這么理解
#include <iostream>
using namespace std;
class B
{
int n;
public:
B(int _n=0)
{
n=_n;
}
B(B& o)
{
cout<<"Call B的複製構造函式:對象"<<o.n<<endl;
}
};
class A
{
B obj1;
B obj2;
public:
A(): obj2(B(2)), obj1(B(1)) //列表與變數聲明的順序無關
{
}
A(A& o)
{
cout<<"Call A的複製構造函式"<<endl;
}
};
int main()
{
A obj;
A obj1(obj); //調用複製構造函式 與 int a(3)比較
A obj2 = obj; //調用複製構造函式 與 int a=3 比較
obj1 = obj2; //調用賦值函式 與 a=3 比較
return 0;