freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語(yǔ)言程序設(shè)計(jì)教程(清華第二版下)ppt(編輯修改稿)

2025-01-03 21:40 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 第7章 類與對(duì)象 析構(gòu)函數(shù) 16 17 18 19 20 21 22 23 24 25 26 27 28 ~Clock() { coutdestructor:H:M:Sendl。 } }。 Clock C1(8,0,0)。 Clock C2(9,0,0)。 int main(void) { Clock C3(10,0,0)。 Clock C4(11,0,0)。 return 0。 } 運(yùn)行結(jié)果 : constructor:8:0:0 constructor:9:0:0 constructor:10:0:0 constructor:11:0:0 destructor:11:0:0 destructor:10:0:0 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /********************************** * * * 基本的字符串類 * **********************************/ include iostream using namespace std。 class String { private: char *Str。 int len。 public: void ShowStr() { coutstring:Str,length:lenendl。 } String() { len=0。 Str=NULL。 } C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 String(const char *p) { len=strlen(p)。 Str=new char[len+1]。 strcpy(Str,p)。 } ~String() { if (Str!=NULL) { delete [] Str。 Str=NULL。 } } }。 int main(void) { char s[]=ABCDE。 String s1(s)。 String s2(123456)。 ()。 ()。 return 0。 } 運(yùn)行結(jié)果 : string:ABCDE, length:5 string:123456, length:6 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 拷貝構(gòu)造函數(shù) 拷貝構(gòu)造函數(shù) 是與類名相同,形參是本類的對(duì)象的引用的函數(shù),在用 已存在對(duì)象 初始化 新建立對(duì)象 時(shí)調(diào)用。 類的拷貝構(gòu)造函數(shù)一般由用戶定義,如果用戶沒(méi)有定義拷貝構(gòu)造函數(shù),系統(tǒng)就會(huì) 自動(dòng)生成 一個(gè)默認(rèn)函數(shù),這個(gè)默認(rèn)拷貝構(gòu)造函數(shù)的功能是把初始值對(duì)象的每個(gè)數(shù)據(jù)成員的值 依次復(fù)制 到新建立的對(duì)象中。因此,也可以說(shuō)是完成了同類對(duì)象的 克隆 (Clone)。這樣得到的對(duì)象和原對(duì)象具有完全相同的數(shù)據(jù)成員,即完全相同的屬性。 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 拷貝構(gòu)造函數(shù) 用戶可以也可以 根據(jù)實(shí)際問(wèn)題的需要 定義特定的拷貝構(gòu)造函數(shù)來(lái)改變?nèi)笔】截悩?gòu)造函數(shù)的行為,以實(shí)現(xiàn)同類對(duì)象之間數(shù)據(jù)成員的傳遞。如果用戶自定義了拷貝構(gòu)造函數(shù),則在用一個(gè)類的對(duì)象初始化該類的另外一個(gè)對(duì)象時(shí), 自動(dòng)調(diào)用 自定義的拷貝構(gòu)造函數(shù)。 定義一個(gè)拷貝構(gòu)造函數(shù)的一般形式為: 拷貝構(gòu)造函數(shù)在用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí)調(diào)用,以下 三種情況 相當(dāng)于用一個(gè)已存在的對(duì)象去初始化新建立的對(duì)象 , 此時(shí) , 調(diào)用拷貝構(gòu)造函數(shù): ① 當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí)。 ② 如果函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)時(shí),將對(duì)象作為函數(shù)實(shí)參傳遞給函數(shù)的形參時(shí)。 ③ 如果函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行完成,將返回值返回時(shí)。 類名(類名 amp。 對(duì)象名) { … } 。 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /***************************** * * * 構(gòu)造拷貝構(gòu)造函數(shù) * *****************************/ include iostream using namespace std。 class Clock { private: int H,M,S。 public: Clock(int h=0,int m=0,int s=0) { H=h,M=m,S=s。 coutconstructor:H:M:Sendl。 } ~Clock() { coutdestructor:H:M:Sendl。 } C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Clock(Clock amp。 p) { coutcopy constructor,before call: H:M:Sendl。 H=。 M=。 S=。 } void ShowTime() { coutH:M:Sendl。 } }。 Clock fun(Clock C) { return C。 } int main(void) { Clock C1(8,0,0)。 Clock C2(9,0,0)。 Clock C3(C1)。 fun(C2)。 Clock C4。 C4=C2。 return 0。 } 運(yùn)行結(jié)果 : constructor:8:0:0 constructor:9:0:0 copy constructor,before call: 858993460:858993460:858993460 copy constructor,before call: 1310592:4202234:1310568 copy constructor,before call: 858993460:858993460:858993460 destructor:9:0:0 destructor:9:0:0 constructor:0:0:0 destructor:9:0:0 destructor:8:0:0 destructor:9:0:0 destructor:8:0:0 ?注意 : ? 拷貝構(gòu)造函數(shù)只是在用一個(gè)已存在的對(duì)象去初始化新建立的對(duì)象時(shí)調(diào)用,在對(duì) 象進(jìn)行賦值時(shí),拷貝構(gòu)造函數(shù)不被調(diào)用。 ? 用一個(gè)常量初始化新建立的對(duì)象時(shí),調(diào)用構(gòu)造函數(shù),不調(diào)用拷貝構(gòu)造函數(shù)。 ? 建立對(duì)象時(shí),構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)有且僅有一個(gè)被調(diào)用。 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 淺拷貝與深拷貝 在默認(rèn)的拷貝構(gòu)造函數(shù)中,拷貝的策略是 直接將原對(duì)象的數(shù)據(jù)成員值依次拷貝給新對(duì)象中對(duì)應(yīng)的數(shù)據(jù)成員 ,如前面示例 義的拷貝函數(shù)所示,那么我們 為何不直接使用系統(tǒng)默認(rèn)的拷貝構(gòu)造函數(shù) ,何必又自己定義一個(gè)拷貝構(gòu)造函數(shù)呢?但是,有些情況下使用默認(rèn)的拷貝構(gòu)造函數(shù)卻會(huì)出現(xiàn) 意想不到的問(wèn)題 。 例如,使用程序 String類,執(zhí)行下列程序系統(tǒng)就會(huì)出錯(cuò) : void main() { String s1(123456)。 String s2=s1。 } C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 淺拷貝與深拷貝 為什么會(huì)出錯(cuò)呢?程序中首先創(chuàng)建對(duì)象 s1, 為對(duì)象 s1分配相應(yīng)的內(nèi)存資源,調(diào)用構(gòu)造函數(shù)初始化該對(duì)象,然后調(diào)用系統(tǒng)缺省的拷貝構(gòu)造函數(shù)將對(duì)象 s1拷貝給對(duì)象 s2,這一切看來(lái)似乎很正常,但程序的運(yùn)行卻出現(xiàn)異常! 原因在于默認(rèn)的拷貝構(gòu)造函數(shù)實(shí)現(xiàn)的只能是 淺拷貝 ,即直接將原對(duì)象的數(shù)據(jù)成員值依次拷貝給新對(duì)象中對(duì)應(yīng)的數(shù)據(jù)成員 ,并沒(méi)有為新對(duì)象另外分配內(nèi)存資源。這樣,如果對(duì)象的數(shù)據(jù)成員是指針, 兩個(gè)指針對(duì)象實(shí)際上指向的是同一塊內(nèi)存空間 。 當(dāng)執(zhí)行 String s2=s1時(shí),默認(rèn)的淺拷貝構(gòu)造函數(shù)進(jìn)行的是下列操作: =。 =。 實(shí)際上是將 ,并沒(méi)有為 ,執(zhí)行String s2=s1。后,對(duì)象 s2析構(gòu),釋放內(nèi)存,然后對(duì)象 s1析構(gòu),由于 和,而 同一塊內(nèi)存不可能釋放兩次 ,所以當(dāng)對(duì)象 s1析構(gòu)時(shí),程序出現(xiàn) 異常 ,無(wú)法正常執(zhí)行和結(jié)束。 由此可見(jiàn),在某些情況下,淺拷貝會(huì)帶來(lái)數(shù)據(jù)安全方面的隱患。 C++語(yǔ)言程序設(shè)計(jì)教程 第7章 類與對(duì)象 淺拷貝與深拷貝 當(dāng)類的數(shù)據(jù)成員中有指針類型時(shí),我們就必須定義一個(gè)特定的拷貝構(gòu)造函數(shù),該拷貝構(gòu)造函數(shù)不僅可以實(shí)現(xiàn)原對(duì)象和新對(duì)象之間數(shù)據(jù)成員的拷貝,而且可以為新的對(duì)象 分配單獨(dú)的內(nèi)存資源 ,這就是 深拷貝構(gòu)造函數(shù) 。 s1 l en = 6 39。 1 39。 s1 l en = 6 39。 1 39。 S t r 39。 2 39。 S t r 39。 2 39。 … … 39。 6 39。 39。 6 39。 39。 \ 0 39。 39。 \ 039。 s2 l en= 6 s2 l en = 6
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1