C++面向?qū)ο蟾呒?jí)編程
第二周結(jié)構(gòu)框圖:
7.三大函數(shù):拷貝構(gòu)造改艇,拷貝賦值和析構(gòu)函數(shù)
8.堆,棧與內(nèi)存管理
9.復(fù)習(xí)String的實(shí)現(xiàn)過(guò)程
10.擴(kuò)展補(bǔ)充:類模板坟岔,函數(shù)模板及其他
7.三大函數(shù):拷貝構(gòu)造谒兄,拷貝賦值和析構(gòu)函數(shù):
String class:
默認(rèn)編譯器會(huì)給出一套拷貝構(gòu)造和拷貝賦值定義(這份特別標(biāo)準(zhǔn)),但帶指針的class編譯器給的不夠用社付,需自己定義承疲,所以邻耕,只要class中帶指針,不能用編譯器默認(rèn)給的燕鸽,依下圖講解拷貝構(gòu)造和拷貝賦值:
string-test.cpp
下面講解Big Three:
(筆記注釋都下在圖里面了)
筆記注釋都下在圖里面了
構(gòu)造函數(shù)與析構(gòu)函數(shù):
這里寫圖片描述
程序結(jié)束之前必須釋放動(dòng)態(tài)分配到的堆內(nèi)存(寫到析構(gòu)函數(shù)中)
這里寫圖片描述
拷貝構(gòu)造函數(shù):
這里寫圖片描述
拷貝賦值函數(shù):
(筆記在圖上)
這里寫圖片描述
注意要寫檢測(cè)自我賦值語(yǔ)句兄世,如果不寫可能會(huì)導(dǎo)致下圖:
這里寫圖片描述
如果沒(méi)寫檢測(cè)自我賦值語(yǔ)句,可能會(huì)出錯(cuò)啊研!
侯捷老師總結(jié):寫檢測(cè)自我賦值語(yǔ)句不止為了效率高御滩,而且是為了防止出錯(cuò)!
8.堆党远,棧與內(nèi)存管理:
output函數(shù):
這里寫圖片描述
cout這種東西本來(lái)就可以接收字符串的地址以打印出字符串
所謂堆棧:
這里寫圖片描述
堆對(duì)象的生命期
這里寫圖片描述
注意:new先分配memory削解,再調(diào)用ctor
delete:先調(diào)用dtor,在釋放memory
動(dòng)態(tài)分配所得的內(nèi)存塊,in VC:
這里寫圖片描述
調(diào)試模式下沟娱,多出來(lái)的內(nèi)存是一種必要的浪費(fèi)氛驮,因?yàn)橐院蠡厥諘r(shí)需要靠某些東西順利回收。
上下cookie最重要的作用是記錄整塊給你的大谢ǔ痢(以便回收時(shí)讓編譯器知道要回收的大辛)
array new一定要搭配array delete
這里寫圖片描述
要使用array delete否則會(huì)出現(xiàn)內(nèi)存泄漏
10.擴(kuò)展補(bǔ)充:類模板,函數(shù)模板及其他
進(jìn)一步補(bǔ)充:static
這里寫圖片描述
1.調(diào)用相同的函數(shù)碱屁,傳給他們不同的地址磷脯,這樣才有機(jī)會(huì)去處理不同的數(shù)據(jù)。
2.靜態(tài)函數(shù)沒(méi)有this pointer
3.靜態(tài)函數(shù)只能處理靜態(tài)數(shù)據(jù)娩脾。
4.class中的靜態(tài)數(shù)據(jù)一定要在class外面寫上定義U允摹!柿赊!
5.調(diào)用static函數(shù)的方式有二:
a.通過(guò)object調(diào)用
b.通過(guò)class name調(diào)用
class templete 類模板:
類模板會(huì)造成代碼必要的膨脹