bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

【C++】拷貝構造函數-創新互聯

目錄

成都創新互聯"三網合一"的企業建站思路。企業可建設擁有電腦版、微信版、手機版的企業網站。實現跨屏營銷,產品發布一步更新,電腦網絡+移動網絡一網打盡,滿足企業的營銷需求!成都創新互聯具備承接各種類型的網站制作、做網站項目的能力。經過十余年的努力的開拓,為不同行業的企事業單位提供了優質的服務,并獲得了客戶的一致好評。

默認拷貝構造函數?

拷貝構造函數的原型:

為什么不用值傳遞?

為什么不用指針傳遞?

調用拷貝構造函數的3種情況 (舊對象去構造新對象)


我們熟悉的類型有以下操作:

1.聲明:int a;

2.聲明并初始化:int a = 10;

3.賦值:int a = 10;int b = a;

類作為一個類型當然也有以上操作,其中默認的構造函數可以完成操作1,人為建立的構造函數可以完成操作2,3。對于第三種操作,類中也提供了默認的函數——拷貝構造函數。

默認拷貝構造函數?

類會提供一個默認的拷貝構造函數,用已有對象的值去依此初始化新對象的值;如果人為提供了,則類不會提供默認。

? 拷貝構造函數又叫復制構造函數。

拷貝構造函數的原型:

類名(const 類名& 形參名) :(初始化列表){}

可以看到,這里是引用傳遞,加了const防止值被修改

為什么不用值傳遞?

值傳遞將待傳的值賦值一份過去,形參需要初始化,如果使用值傳遞,像下面這樣,程序會掉入死循環:

假如有:A a = 10;A b(a);

將a傳入成員b時調用拷貝構造函數A(A t);

而A(A t)函數中的形參成員t需要初始化,這又需要調用拷貝構造函數A(A t);

如此下去不斷調用拷貝構造函數,無窮無盡。

class A
{
public:
	A(int i = 0) :m_i(i) { cout<< "A"<< m_i<< endl; }
	~A() { cout<< "~A"<< m_i<< endl; }
	A(A t) :m_i(t->m_i)//值傳遞
	{
		cout<< "A(A)"<< endl;
	}
	void print() { cout<< m_i<< endl; }
private:
	int m_i;
};
為什么不用指針傳遞?

A(A* t) :m_i(t->m_i)
{cout<< "A(A)"<< endl;}

其實指針傳遞的結果是對的,但是看的時候有歧義

A a = 10;A b = &a;//人們無法確定是用a初始化b,還是用&a初始化b;A b(&a)的作用同A b = &a

調用拷貝構造函數的3種情況 (舊對象去構造新對象)

1.用已有對象去初始化新對象
2.函數傳參--值傳遞 由實參傳遞給形參的過程
3.函數返回值 --類類型的值返回,由局部對象構造臨時對象

情況1很好理解

?A a(5); //A(int) 5
?A b(a);//用a去初始化b對象

情況2就是拷貝構造函數為什么不用值傳遞的原因

void fun(A t){}?

情況3在const關鍵字那篇中提到過,函數傳參時不是把本身的變量傳過去,而是生成一個臨時存儲空間,這個臨時的空間如果是類類型的則需要調用拷貝構造函數。

A fun(){}

最后看一下這些函數的調用:

class A
{
public:
	A(int i = 0) :m_i(i) { cout<< "A"<< m_i<< endl; }
	~A() { cout<< "~A"<< m_i<< endl; }

	A(const A& t) :m_i(t.m_i)  //拷貝構造函數
	{
		cout<< "A(A)"<< m_i<< endl;
	}
	void print() { cout<< m_i<< endl; }
private:
	int m_i;
};
void fn(A s)  //A s(c) 用c構造s 調用拷貝構造 A(A) 30
{
	cout<< "fn"<< endl;
	//fn在即將退出的時候,要將局部對象s析構 ~A 30
}
A test()
{
	A tt(60);  //A 60
	return tt; //從tt到臨時對象調用拷貝構造
} 

void main()
{
	A a(5); 
	A b(a); 
	A c(30);  //調用普通構造  A 30
	fn(c);
	c = test();
}

結果:

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

當前文章:【C++】拷貝構造函數-創新互聯
路徑分享:http://vcdvsql.cn/article12/djhidc.html

成都網站建設公司_創新互聯,為您提供網站設計企業網站制作關鍵詞優化做網站微信公眾號外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發