建構函式與解構函式

study_all_day發表於2024-04-18

建構函式

可以有多個,可以過載

複製建構函式

  • 只有一個引數,即對同類物件的引用
  • 沒有定義會生成預設複製建構函式
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]]

ANSWER:3

相關文章