建構函式
可以有多個,可以過載
複製建構函式
- 只有一個引數,即對同類物件的引用
- 沒有定義會生成預設複製建構函式
Complex(const Complex & c){
real=c.real;
imag=c.imag;
}
三種使用情況
- 用物件去初始化同類的另一個物件
Complex c2(c1);
- 函式有一個引數是類A是的物件時
void Fun(A a1){}
int main(){
A a1;
Fun(a2);
return 0;
}
- 返回值是類A的物件
class A{
public:
int v;
A(int n){v=n;};
A(const A&a){
v=a.v;
}
}
A fun(){
A b(4);
return b;
}
int main(){
cout<<fun().v<<endl;
return 0;
}
注意:物件間複製並不導致複製建構函式
型別轉換建構函式
- 實現型別的自動轉換
- 只有一個引數,而不是複製建構函式的建構函式,一般可以看作轉換建構函式
class Complex{
public:
double real,imag;
Complex(int i){
real=i;
imag=0;
}
Complex(double r,double){real =r,imag =i;}
}
int main(){
Complex c1(7,8);
Complex c2 = 12;
c1 = 9; //9被自動轉換為一個臨時complex物件
}
解構函式
- 最多隻能有一個解構函式
- 沒有引數和返回值
- 在物件消亡時被自動呼叫
解構函式在物件作為返回值返回時被呼叫
![[Pasted image 20231224210231.png]]
建構函式與解構函式的呼叫時機
演示
![[Pasted image 20231224211248.png]]
new出來的必須delet才會呼叫解構函式
![[Pasted image 20231224211504.png]]