国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++初級(jí)主題--(5)拷貝構(gòu)造函數(shù)

2019-11-11 07:51:15
字體:
供稿:網(wǎng)友

一.概念

同一個(gè)類的對(duì)象在內(nèi)存中有完全相同的結(jié)構(gòu),如果作為一個(gè)整體進(jìn)行復(fù)制或稱拷貝是完全可行的。這個(gè)拷貝過程只需要拷貝數(shù)據(jù)成員,而函數(shù)成員是共用的(只有一份拷貝)。在建立對(duì)象時(shí)可用同一類的另一個(gè)對(duì)象來初始化該對(duì)象,這時(shí)所用的構(gòu)造函數(shù)稱為拷貝構(gòu)造函數(shù)(Copy Constructor)。

int main(){ Test t1(10); Test t(t1); //調(diào)用拷貝構(gòu)造函數(shù) Test t2 = t1; //調(diào)動(dòng)拷貝構(gòu)造函數(shù)}

二.詳解拷貝構(gòu)造函數(shù)

1.調(diào)動(dòng)拷貝構(gòu)造函數(shù)的情況 (1)對(duì)象初始化對(duì)象調(diào)動(dòng)拷貝構(gòu)造函數(shù)

區(qū)別初始化與賦值

Test t(10);Test t1;t1 = t; //賦值Test t2(t);//初始化Test t3 = t;//初始化

另外兩種情況 (2)當(dāng)函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)時(shí),進(jìn)行形參與實(shí)參結(jié)合時(shí)使用。這時(shí)要在內(nèi)存新建立一個(gè)局部對(duì)象,并把實(shí)參拷貝到新的對(duì)象中。

void fun(Test t){}

(3)當(dāng)函數(shù)的返回值是類對(duì)象,函數(shù)執(zhí)行完成返回調(diào)用者時(shí)使用。理由也是要建立一個(gè)臨時(shí)對(duì)象中,再返回調(diào)用者。

Test fun(){ Test t; return t;}

因?yàn)?strong>局部對(duì)象在離開建立它的函數(shù)時(shí)就消亡了,不可能在返回調(diào)用函數(shù)后繼續(xù)生存,所以在處理這種情況時(shí),編譯系統(tǒng)會(huì)在調(diào)用函數(shù)的表達(dá)式中創(chuàng)建一個(gè)無名臨時(shí)對(duì)象,該臨時(shí)對(duì)象的生存周期只在函數(shù)調(diào)用處的表達(dá)式中。所謂return 對(duì)象,實(shí)際上是調(diào)用拷貝構(gòu)造函數(shù)把該對(duì)象的值拷入臨時(shí)對(duì)象(對(duì)象初始化對(duì)象),最終返回的是臨時(shí)對(duì)象。如果返回的是變量,處理過程類似,只是不調(diào)用構(gòu)造函數(shù)

這三種情況無疑都是對(duì)象初始化對(duì)象而已.

2.拷貝構(gòu)造函數(shù)的參數(shù)–采用常引用

//拷貝構(gòu)造函數(shù)的一般形式Test(const Test &t){ data = t.data;}

(1)為什么采用引用傳遞參數(shù) 如果把一個(gè)真實(shí)的類對(duì)象作為參數(shù)傳遞到拷貝構(gòu)造函數(shù),此時(shí),參數(shù)表里又是用對(duì)象初始化對(duì)象,調(diào)動(dòng)拷貝構(gòu)造函數(shù)。如此往復(fù),造成無限遞歸。 如下圖: 這里寫圖片描述

(2)為什么是常引用 常引用就使得被拷貝的類對(duì)象不能被隨意修改,保證信息不被丟失。當(dāng)然,你可以不用引用。

3.默認(rèn)拷貝構(gòu)造函數(shù)的功能 將對(duì)應(yīng)的成員值進(jìn)行拷貝

t1 tdata<---data
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 宁城县| 凭祥市| 会东县| 麦盖提县| 普格县| 新巴尔虎左旗| 正宁县| 龙门县| 平山县| 博乐市| 郁南县| 聂荣县| 板桥市| 鄯善县| 兴城市| 大石桥市| 普兰店市| 晋城| 施甸县| 丰顺县| 黔西| 郴州市| 沧源| 高青县| 昌吉市| 韶关市| 施秉县| 中阳县| 舒城县| 阆中市| 桑日县| 尼木县| 郑州市| 新乡市| 忻州市| 衡阳市| 铁岭市| 宁国市| 永安市| 永安市| 龙川县|