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

下載本文檔

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

文檔簡介

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

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

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

4、象的生命期結(jié)束,程序就自動執(zhí)行析構(gòu)函數(shù)來完成這些工作。第20頁/共89頁第二十頁,共89頁。但它只是徒有析構(gòu)函數(shù)的名稱和形式,實際上什么(shn me)操作都不進行。想讓析構(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ù)時(此時程序終止),調(diào)用(dioyng)析構(gòu)函數(shù)。第27頁/共89頁第二十七頁,共89頁。第28頁/共89頁第二十八頁,共89頁。Student stud50; /假設(shè)已聲明了Student類,定義stud數(shù)組,有50個元素第29頁/共89頁第二十九頁,共89頁。第30頁/共89頁第三十頁,共89頁。它提供3個實參Student(1002,19,76), /調(diào)用第2個元素的構(gòu)造函數(shù),為它提供3個實參Student(1003,18,72)

6、 /調(diào)用第3個元素的構(gòu)造函數(shù),為它提供3個實參;第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)變量訪問對象數(shù)據(jù)成員hour。p1=&t1.hour; /將對象t1的數(shù)據(jù)成員hour的地址賦給p1,p1指向t1.hourcout*p1height)*(thi

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

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

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

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

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

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

13、9頁。第66頁/共89頁第六十六頁,共89頁。(4) 靜態(tài)數(shù)據(jù)成員既可以通過對象名引用,也可以通過類名來引用。例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),可以通過類名和域運算符“ ”引用靜態(tài)數(shù)據(jù)成員,而不論類對象是否存在。第70頁/共89頁第七十頁,共89頁。a.volume( );但這并不意味著此函數(shù)是屬于對象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),應該加對象名和成員(chngyun)運算符“.”。如couta.widthendl; /引用本類對象a中的非靜態(tài)成員(chngyun)假設(shè)a已定義為Box類對象,且在當前作用域內(nèi)有效,則此語句合法。第73頁/共89頁第七十三頁,共89頁。第74頁/共89頁第七

15、十四頁,共89頁。第75頁/共89頁第七十五頁,共89頁。個對象元素,而是由各對象元素共享的,可以看出: 它們的值是在不斷變化的,而且無論對哪個對象元素而言,都是相同的,而且始終不釋放內(nèi)存空間。第76頁/共89頁第七十六頁,共89頁。(4) 在main函數(shù)中,引用total函數(shù)要加對象名(今用對象數(shù)組元素名),引用靜態(tài)成員函數(shù)average函數(shù)要用類名或?qū)ο竺?。?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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論