譚浩強(qiáng)版《C++程序設(shè)計(jì)》第9章n1學(xué)習(xí)教案_第1頁
譚浩強(qiáng)版《C++程序設(shè)計(jì)》第9章n1學(xué)習(xí)教案_第2頁
譚浩強(qiáng)版《C++程序設(shè)計(jì)》第9章n1學(xué)習(xí)教案_第3頁
譚浩強(qiáng)版《C++程序設(shè)計(jì)》第9章n1學(xué)習(xí)教案_第4頁
譚浩強(qiáng)版《C++程序設(shè)計(jì)》第9章n1學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1譚浩強(qiáng)版譚浩強(qiáng)版C+程序設(shè)計(jì)程序設(shè)計(jì)(chn x sh j) 第第9章章n1第一頁,共89頁。Time t1=14,56,30; /將t1初始化為14:56:30但是,一般數(shù)據(jù)成員(chngyun)是私有的,或者類中有private或protected的成員(chngyun),就不能用這種方法初始化。如何實(shí)現(xiàn)?第2頁/共89頁第二頁,共89頁。它不具有任何類型,不返回任何值。構(gòu)造函數(shù)的功能是由用戶(yngh)定義的,用戶(yngh)根據(jù)初始化的要求設(shè)計(jì)函數(shù)體和函數(shù)參數(shù)。第3頁/共89頁第三頁,共89頁。第4頁/共89頁第四頁,共89頁。第5頁/共89頁第五頁,共89頁。hour=0;

2、minute=0;sec=0;第6頁/共89頁第六頁,共89頁。成一個(gè)構(gòu)造函數(shù),只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也沒有參數(shù),不執(zhí)行初始化操作。第7頁/共89頁第七頁,共89頁。q定義對(duì)象的一般格式為 :q類名 對(duì)象名(實(shí)參1,實(shí)參2,);第8頁/共89頁第八頁,共89頁。第9頁/共89頁第九頁,共89頁。第10頁/共89頁第十頁,共89頁。這種寫法方便、簡(jiǎn)練,尤其當(dāng)需要初始化的數(shù)據(jù)成員較多時(shí)更顯其優(yōu)越性。甚至可以直接在類體中(而不是在類外)定義構(gòu)造函數(shù)(hnsh)。第11頁/共89頁第十一頁,共89頁。第12頁/共89頁第十二頁,共89頁。第13頁/共89頁第十三頁,共89頁。第14頁/共89

3、頁第十四頁,共89頁。多個(gè)構(gòu)造函數(shù),但是對(duì)于每一個(gè)(y )對(duì)象來說,建立對(duì)象時(shí)只執(zhí)行其中一個(gè)(y )構(gòu)造函數(shù),并非每個(gè)構(gòu)造函數(shù)都被執(zhí)行。第15頁/共89頁第十五頁,共89頁。第16頁/共89頁第十六頁,共89頁。第17頁/共89頁第十七頁,共89頁。第18頁/共89頁第十八頁,共89頁。對(duì)象(它是自動(dòng)局部對(duì)象),當(dāng)這個(gè)函數(shù)被調(diào)用結(jié)束時(shí),對(duì)象應(yīng)該釋放,在對(duì)象釋放前自動(dòng)執(zhí)行(zhxng)析構(gòu)函數(shù)。第19頁/共89頁第十九頁,共89頁。析構(gòu)函數(shù)的作用:并不是刪除對(duì)象,而是在撤銷對(duì)象占用的內(nèi)存之前完成一些清理(qngl)工作,使這部分內(nèi)存可以被程序分配給新對(duì)象使用。程序設(shè)計(jì)者事先設(shè)計(jì)好析構(gòu)函數(shù),只要對(duì)

4、象的生命期結(jié)束,程序就自動(dòng)執(zhí)行析構(gòu)函數(shù)來完成這些工作。第20頁/共89頁第二十頁,共89頁。但它只是徒有析構(gòu)函數(shù)的名稱和形式,實(shí)際上什么(shn me)操作都不進(jìn)行。想讓析構(gòu)函數(shù)完成任何工作,都必須在定義的析構(gòu)函數(shù)中指定。第21頁/共89頁第二十一頁,共89頁。第22頁/共89頁第二十二頁,共89頁。第23頁/共89頁第二十三頁,共89頁。num: 10011 (執(zhí)行stud2的display函數(shù))name:Zhang_funsex:mDestructor called. (執(zhí)行stud2的析構(gòu)函數(shù))Destructor called. (執(zhí)行stud1的析構(gòu)函數(shù))第24頁/共89頁第二十四頁

5、,共89頁。最先被調(diào)用。如圖9.1示意。第25頁/共89頁第二十五頁,共89頁。圖9.1第26頁/共89頁第二十六頁,共89頁。調(diào)用(dioyng)exit函數(shù)時(shí)(此時(shí)程序終止),調(diào)用(dioyng)析構(gòu)函數(shù)。第27頁/共89頁第二十七頁,共89頁。第28頁/共89頁第二十八頁,共89頁。Student stud50; /假設(shè)已聲明了Student類,定義stud數(shù)組,有50個(gè)元素第29頁/共89頁第二十九頁,共89頁。第30頁/共89頁第三十頁,共89頁。它提供3個(gè)實(shí)參Student(1002,19,76), /調(diào)用第2個(gè)元素的構(gòu)造函數(shù),為它提供3個(gè)實(shí)參Student(1003,18,72)

6、 /調(diào)用第3個(gè)元素的構(gòu)造函數(shù),為它提供3個(gè)實(shí)參;第31頁/共89頁第三十一頁,共89頁。第32頁/共89頁第三十二頁,共89頁。第33頁/共89頁第三十三頁,共89頁。第34頁/共89頁第三十四頁,共89頁。第35頁/共89頁第三十五頁,共89頁。第36頁/共89頁第三十六頁,共89頁。第37頁/共89頁第三十七頁,共89頁。如果Time類的數(shù)據(jù)成員hour為公用的整型數(shù)據(jù),則可以在類外通過指向?qū)ο髷?shù)據(jù)成員的指針(zhzhn)變量訪問對(duì)象數(shù)據(jù)成員hour。p1=&t1.hour; /將對(duì)象t1的數(shù)據(jù)成員hour的地址賦給p1,p1指向t1.hourcout*p1height)*(thi

7、s-width)*(this-length)由于當(dāng)前this指向a,因此相當(dāng)于執(zhí)行:(a.height)*(a.width)*(a.length)這就計(jì)算出長(zhǎng)方體a的體積。第42頁/共89頁第四十二頁,共89頁。即在成員函數(shù)的形參表列中增加一個(gè)this指針。在調(diào)用該成員函數(shù)時(shí),實(shí)際上是用以下方式調(diào)用的:a.volume(&a);將對(duì)象a的地址傳給形參this指針。然后按this的指向去引用其他成員。第43頁/共89頁第四十三頁,共89頁。this-length); /顯式使用this指針可以用*this表示被調(diào)用的成員函數(shù)所在的對(duì)象,*this就是this所指向的對(duì)象,即當(dāng)前的對(duì)象。例

8、如在成員函數(shù)a.volume( )的函數(shù)體中,如果出現(xiàn)*this,它就是本對(duì)象a。上面的return語句也可寫成return(*this).height * (*this).width *(*this).length);第44頁/共89頁第四十四頁,共89頁。第45頁/共89頁第四十五頁,共89頁。第46頁/共89頁第四十六頁,共89頁。第47頁/共89頁第四十七頁,共89頁。這種寫法是把上面兩個(gè)語句(定義指針變量和用new建立新對(duì)象)合并為一個(gè)語句,并指定初值。這樣更精煉。新對(duì)象中的height,width和length分別獲得初值12,15,18。調(diào)用對(duì)象既可以通過對(duì)象名,也可以通過指針。

9、用new建立的動(dòng)態(tài)對(duì)象一般是不用對(duì)象名的,是通過指針訪問的,它主要應(yīng)用于動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),如鏈表。訪問鏈表中的結(jié)點(diǎn),并不需要通過對(duì)象名,第48頁/共89頁第四十八頁,共89頁。delete pt; /釋放pt指向的內(nèi)存空間第49頁/共89頁第四十九頁,共89頁。第50頁/共89頁第五十頁,共89頁。類對(duì)象之間的賦值,這是通過對(duì)賦值運(yùn)算符的重載實(shí)現(xiàn)的。實(shí)際這個(gè)過程是通過成員復(fù)制來完成的,即將一個(gè)對(duì)象的成員值一一復(fù)制給另一對(duì)象的對(duì)應(yīng)成員。第51頁/共89頁第五十一頁,共89頁。第52頁/共89頁第五十二頁,共89頁。第53頁/共89頁第五十三頁,共89頁。第54頁/共89頁第五十四頁,共89頁。類名

10、 對(duì)象2(對(duì)象1);用對(duì)象1復(fù)制出對(duì)象2。第55頁/共89頁第五十五頁,共89頁。length=b.length;復(fù)制構(gòu)造函數(shù)也是構(gòu)造函數(shù),但它只有(zhyu)一個(gè)參數(shù),這個(gè)參數(shù)是本類的對(duì)象(不能是其他類的對(duì)象),而且采用對(duì)象的引用的形式(一般約定加const聲明,使參數(shù)值不能改變,以免在調(diào)用此函數(shù)時(shí)因不慎而使對(duì)象值被修改)。第56頁/共89頁第五十六頁,共89頁。給形參b(b是box1的引用),因此(ync)執(zhí)行復(fù)制構(gòu)造函數(shù)的函數(shù)體時(shí),將box1對(duì)象中各數(shù)據(jù)成員的值賦給box2中各數(shù)據(jù)成員。如果用戶自己未定義復(fù)制構(gòu)造函數(shù),則編譯系統(tǒng)會(huì)自動(dòng)提供一個(gè)默認(rèn)的復(fù)制構(gòu)造函數(shù),其作用只是簡(jiǎn)單地復(fù)制類中每

11、個(gè)數(shù)據(jù)成員。第57頁/共89頁第五十七頁,共89頁。出: 這種形式與變量初始化語句類似,請(qǐng)與下面定義變量的語句作比較:int a=4,b=a;這種形式看起來很直觀,用起來很方便(fngbin)。但是其作用都是調(diào)用復(fù)制構(gòu)造函數(shù)。第58頁/共89頁第五十八頁,共89頁。第59頁/共89頁第五十九頁,共89頁。第60頁/共89頁第六十頁,共89頁。void fun(Box b) /形參是類的對(duì)象 int main( )Box box1(12,15,18);fun(box1); /實(shí)參是類的對(duì)象,調(diào)用函數(shù)時(shí)將復(fù)制一個(gè)新對(duì)象breturn 0;第61頁/共89頁第六十一頁,共89頁。第62頁/共89頁第

12、六十二頁,共89頁。數(shù)中都可以改變?nèi)肿兞康闹?,全局變量的值為各函?shù)共享。但是用全局變量的安全性得不到保證,由于在各處都可以自由地修改全局變量的值,很有可能偶一失誤,全局變量的值就被修改,導(dǎo)致程序的失敗。因此在實(shí)際工作中很少使用全局變量。如果想在同類的多個(gè)對(duì)象(duxing)之間實(shí)現(xiàn)數(shù)據(jù)共享,也不要用全局對(duì)象(duxing),可以用靜態(tài)的數(shù)據(jù)成員。第63頁/共89頁第六十三頁,共89頁。第64頁/共89頁第六十四頁,共89頁。數(shù)據(jù)成員是在所有(suyu)對(duì)象之外單獨(dú)開辟空間。只要在類中定義了靜態(tài)數(shù)據(jù)成員,即使不定義對(duì)象,也為靜態(tài)數(shù)據(jù)成員分配空間,它可以被引用。第65頁/共89頁第六十五頁,共8

13、9頁。第66頁/共89頁第六十六頁,共89頁。(4) 靜態(tài)數(shù)據(jù)成員既可以通過對(duì)象名引用,也可以通過類名來引用。例9.10 引用靜態(tài)數(shù)據(jù)成員。第67頁/共89頁第六十七頁,共89頁。第68頁/共89頁第六十八頁,共89頁。第69頁/共89頁第六十九頁,共89頁。注意公用靜態(tài)數(shù)據(jù)成員與全局變量的不同,靜態(tài)數(shù)據(jù)成員的作用域只限于定義該類的作用域內(nèi)在此作用域內(nèi),可以通過類名和域運(yùn)算符“ ”引用靜態(tài)數(shù)據(jù)成員,而不論類對(duì)象是否存在。第70頁/共89頁第七十頁,共89頁。a.volume( );但這并不意味著此函數(shù)是屬于對(duì)象a的,而只是用a的類型而已。第71頁/共89頁第七十一頁,共89頁。(f ngwn)

14、。靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的根本區(qū)別:非靜態(tài)成員函數(shù)有this指針,而靜態(tài)成員函數(shù)沒有this指針。由此,靜態(tài)成員函數(shù)不能訪問(fngwn)本類中的非靜態(tài)成員。第72頁/共89頁第七十二頁,共89頁。coutwidthendl; /若width是非靜態(tài)數(shù)據(jù)成員(chngyun),不合法如果一定要引用本類的非靜態(tài)成員(chngyun),應(yīng)該加對(duì)象名和成員(chngyun)運(yùn)算符“.”。如couta.widthendl; /引用本類對(duì)象a中的非靜態(tài)成員(chngyun)假設(shè)a已定義為Box類對(duì)象,且在當(dāng)前作用域內(nèi)有效,則此語句合法。第73頁/共89頁第七十三頁,共89頁。第74頁/共89頁第七

15、十四頁,共89頁。第75頁/共89頁第七十五頁,共89頁。個(gè)對(duì)象元素,而是由各對(duì)象元素共享的,可以看出: 它們的值是在不斷變化的,而且無論對(duì)哪個(gè)對(duì)象元素而言,都是相同的,而且始終不釋放內(nèi)存空間。第76頁/共89頁第七十六頁,共89頁。(4) 在main函數(shù)中,引用total函數(shù)要加對(duì)象名(今用對(duì)象數(shù)組元素名),引用靜態(tài)成員函數(shù)average函數(shù)要用類名或?qū)ο竺5?7頁/共89頁第七十七頁,共89頁。第78頁/共89頁第七十八頁,共89頁。第79頁/共89頁第七十九頁,共89頁。第80頁/共89頁第八十頁,共89頁。第81頁/共89頁第八十一頁,共89頁。部方式訪問私有成員。第82頁/共89頁第八十二頁,共89頁。第83頁/共89頁第八十三頁,共89頁。第84頁/共89頁第八十四頁,共

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論