C譚浩強(qiáng)章學(xué)習(xí)教案_第1頁
C譚浩強(qiáng)章學(xué)習(xí)教案_第2頁
C譚浩強(qiáng)章學(xué)習(xí)教案_第3頁
C譚浩強(qiáng)章學(xué)習(xí)教案_第4頁
C譚浩強(qiáng)章學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩125頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、會計(jì)學(xué)1C譚浩強(qiáng)章譚浩強(qiáng)章注意:注意: 類的數(shù)據(jù)成員是不能在聲明類類的數(shù)據(jù)成員是不能在聲明類時(shí)初始化的。時(shí)初始化的。第1頁/共130頁第2頁/共130頁第3頁/共130頁第4頁/共130頁第5頁/共130頁第6頁/共130頁第7頁/共130頁(5) 如果用戶自己沒有定義構(gòu)造函數(shù),如果用戶自己沒有定義構(gòu)造函數(shù),則則C+系統(tǒng)會自動(dòng)生成一個(gè)構(gòu)造函數(shù),系統(tǒng)會自動(dòng)生成一個(gè)構(gòu)造函數(shù),只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也沒有參數(shù),不執(zhí)行初始化操作。沒有參數(shù),不執(zhí)行初始化操作。第8頁/共130頁,前面已說明:前面已說明: 用戶是不能調(diào)用構(gòu)造函用戶是不能調(diào)用構(gòu)造函數(shù)的,因此無法采

2、用常規(guī)的調(diào)用函數(shù)的數(shù)的,因此無法采用常規(guī)的調(diào)用函數(shù)的方法給出實(shí)參。實(shí)參是在定義對象時(shí)給方法給出實(shí)參。實(shí)參是在定義對象時(shí)給出的。定義對象的一般格式為出的。定義對象的一般格式為類名類名 對象名(實(shí)參對象名(實(shí)參1,實(shí)參,實(shí)參2,);第9頁/共130頁第10頁/共130頁第11頁/共130頁定義構(gòu)造函數(shù)。定義構(gòu)造函數(shù)。第12頁/共130頁第13頁/共130頁第14頁/共130頁第15頁/共130頁第16頁/共130頁10。在例程序的基礎(chǔ)上改寫如下:在例程序的基礎(chǔ)上改寫如下:第17頁/共130頁第18頁/共130頁第19頁/共130頁每一個(gè)對象都有同樣的初始化狀況時(shí)用每一個(gè)對象都有同樣的初始化狀況時(shí)用

3、這種方法更為方便。這種方法更為方便。第20頁/共130頁第21頁/共130頁執(zhí)行析構(gòu)函數(shù)。執(zhí)行析構(gòu)函數(shù)。第22頁/共130頁理工作,使這部分內(nèi)存可以被程序分配理工作,使這部分內(nèi)存可以被程序分配給新對象使用。程序設(shè)計(jì)者事先設(shè)計(jì)好給新對象使用。程序設(shè)計(jì)者事先設(shè)計(jì)好析構(gòu)函數(shù),以完成所需的功能,只要對析構(gòu)函數(shù),以完成所需的功能,只要對象的生命期結(jié)束,程序就自動(dòng)執(zhí)行析構(gòu)象的生命期結(jié)束,程序就自動(dòng)執(zhí)行析構(gòu)函數(shù)來完成這些工作。函數(shù)來完成這些工作。第23頁/共130頁“清理清理”的工作。如果用戶沒有定義析構(gòu)的工作。如果用戶沒有定義析構(gòu)函數(shù),函數(shù),C+編譯系統(tǒng)會自動(dòng)生成一個(gè)析編譯系統(tǒng)會自動(dòng)生成一個(gè)析構(gòu)函數(shù),但它

4、只是徒有析構(gòu)函數(shù)的名稱構(gòu)函數(shù),但它只是徒有析構(gòu)函數(shù)的名稱和形式,實(shí)際上什么操作都不進(jìn)行。想和形式,實(shí)際上什么操作都不進(jìn)行。想讓析構(gòu)函數(shù)完成任何工作,都必須在定讓析構(gòu)函數(shù)完成任何工作,都必須在定義的析構(gòu)函數(shù)中指定。義的析構(gòu)函數(shù)中指定。第24頁/共130頁第25頁/共130頁第26頁/共130頁第27頁/共130頁第28頁/共130頁第29頁/共130頁中有多個(gè)文件,而不同的文件中都定義中有多個(gè)文件,而不同的文件中都定義了全局對象,則這些對象的構(gòu)造函數(shù)的了全局對象,則這些對象的構(gòu)造函數(shù)的執(zhí)行順序是不確定的。當(dāng)執(zhí)行順序是不確定的。當(dāng)main函數(shù)執(zhí)函數(shù)執(zhí)行完畢或調(diào)用行完畢或調(diào)用exit函數(shù)時(shí)(此時(shí)程序

5、終函數(shù)時(shí)(此時(shí)程序終止),調(diào)用析構(gòu)函數(shù)。止),調(diào)用析構(gòu)函數(shù)。第30頁/共130頁設(shè)計(jì)中是相當(dāng)重要的。以上介紹了最基設(shè)計(jì)中是相當(dāng)重要的。以上介紹了最基本的、使用最多的普通構(gòu)造函數(shù),在本本的、使用最多的普通構(gòu)造函數(shù),在本章第節(jié)中將會介紹復(fù)制構(gòu)造函數(shù),在第章第節(jié)中將會介紹復(fù)制構(gòu)造函數(shù),在第10章第節(jié)中還要介紹轉(zhuǎn)換構(gòu)造函數(shù)。章第節(jié)中還要介紹轉(zhuǎn)換構(gòu)造函數(shù)。第31頁/共130頁一個(gè)數(shù)組元素是一個(gè)一個(gè)數(shù)組元素是一個(gè)“學(xué)生類學(xué)生類”對象。例對象。例如如Student stud50; /假設(shè)已聲明了假設(shè)已聲明了Student類,定義類,定義stud數(shù)組,有數(shù)組,有50個(gè)元素個(gè)元素第32頁/共130頁數(shù),且為默認(rèn)

6、參數(shù):數(shù),且為默認(rèn)參數(shù):Student Student(int=1001,int=18,int=60); /定義構(gòu)造函數(shù),有多個(gè)參數(shù),且為默認(rèn)參數(shù)定義構(gòu)造函數(shù),有多個(gè)參數(shù),且為默認(rèn)參數(shù)第33頁/共130頁Student Stud3= /定義對象數(shù)組定義對象數(shù)組Student(1001,18,87), /調(diào)用第調(diào)用第1個(gè)元素的構(gòu)造函數(shù),為它提供個(gè)元素的構(gòu)造函數(shù),為它提供3個(gè)實(shí)參個(gè)實(shí)參Student(1002,19,76), /調(diào)用第調(diào)用第2個(gè)元素的構(gòu)造函數(shù),為它提供個(gè)元素的構(gòu)造函數(shù),為它提供3個(gè)實(shí)參個(gè)實(shí)參第34頁/共130頁第35頁/共130頁第36頁/共130頁第37頁/共130頁第38頁/共

7、130頁*pt.get_time ptget_timept-get_time ( )調(diào)用調(diào)用pt所指向的對象中的所指向的對象中的get_time函數(shù),即函數(shù),即第39頁/共130頁第40頁/共130頁cout*p1endl; /輸出的值輸出的值第41頁/共130頁void (Time *p2)()( ); /定義定義p2為指向?yàn)橹赶騎ime類中公用成員函數(shù)的指針變量類中公用成員函數(shù)的指針變量定義指向公用成員函數(shù)的指針變量的一定義指向公用成員函數(shù)的指針變量的一般形式為般形式為數(shù)據(jù)類型名數(shù)據(jù)類型名 (類名(類名 *指針變量名)指針變量名)(參數(shù)表列);(參數(shù)表列);第42頁/共130頁第43頁/共

8、130頁第44頁/共130頁第45頁/共130頁方體方體a的體積。如果有(的體積。如果有( ),應(yīng)該是引),應(yīng)該是引用對象用對象b中的中的height,width和和length,計(jì)算出長方體計(jì)算出長方體b的體積。而現(xiàn)在都用同的體積。而現(xiàn)在都用同一個(gè)函數(shù)段,系統(tǒng)怎樣使它分別引用一個(gè)函數(shù)段,系統(tǒng)怎樣使它分別引用a或或b中的數(shù)據(jù)成員呢?中的數(shù)據(jù)成員呢?第46頁/共130頁這就計(jì)算出長方體這就計(jì)算出長方體a的體積。同樣如果的體積。同樣如果有(有( ),編譯系統(tǒng)就把對象),編譯系統(tǒng)就把對象b的起始地的起始地址賦給成員函數(shù)址賦給成員函數(shù)volume的的this指針,顯指針,顯然計(jì)算出來的是長方體然計(jì)算出

9、來的是長方體b的體積。的體積。第47頁/共130頁第48頁/共130頁return(*this).height * (*this).width * (*this).length);第49頁/共130頁第50頁/共130頁第51頁/共130頁二者等價(jià)。二者等價(jià)。第52頁/共130頁該函數(shù)未被聲明為該函數(shù)未被聲明為const,就報(bào)錯(cuò),提,就報(bào)錯(cuò),提請編程者注意。請編程者注意。引用常對象中的數(shù)據(jù)成員很簡單,只需引用常對象中的數(shù)據(jù)成員很簡單,只需將該成員函數(shù)聲明為將該成員函數(shù)聲明為const即可。如即可。如第53頁/共130頁第54頁/共130頁第55頁/共130頁表對常數(shù)據(jù)成員進(jìn)行初始化。表對常數(shù)據(jù)

10、成員進(jìn)行初始化。第56頁/共130頁被被constconst的成員函數(shù)引用。具體情況可以的成員函數(shù)引用。具體情況可以用書中表表示。用書中表表示。怎樣利用常成員函數(shù)呢?怎樣利用常成員函數(shù)呢?第57頁/共130頁第58頁/共130頁還有一點(diǎn)要指出:還有一點(diǎn)要指出: 常成員函數(shù)不能調(diào)常成員函數(shù)不能調(diào)用另一個(gè)非用另一個(gè)非const成員函數(shù)。成員函數(shù)。第59頁/共130頁第60頁/共130頁第61頁/共130頁const 類型名類型名 *指針變量名;指針變量名;第62頁/共130頁變量的指針,而不能用指向變量的指針,而不能用指向const變量變量的指針,這樣,在執(zhí)行函數(shù)的過程中可的指針,這樣,在執(zhí)行函數(shù)

11、的過程中可以改變形參指針變量所指向的變量(也以改變形參指針變量所指向的變量(也就是實(shí)參指針?biāo)赶虻淖兞浚┑闹?。就是?shí)參指針?biāo)赶虻淖兞浚┑闹怠5?3頁/共130頁指向常對象的指針變量的概念和使用是指向常對象的指針變量的概念和使用是與此類似的,只要將與此類似的,只要將“變量變量”換成換成“對象對象”即可。即可。第64頁/共130頁第65頁/共130頁第66頁/共130頁第67頁/共130頁第68頁/共130頁第69頁/共130頁形式形式含義含義Time const t1; t1是常對象,其值在任何情況下都不能改是常對象,其值在任何情況下都不能改變變void Time fun( )constfun

12、是是Time類中的常成員函數(shù),可以引用類中的常成員函數(shù),可以引用,但不能修改本類中的數(shù)據(jù)成員,但不能修改本類中的數(shù)據(jù)成員Time * const p;p是指向是指向Time對象的常指針,對象的常指針,p的值(即的值(即p的指向)不能改變的指向)不能改變const Time *p;p是指向是指向Time類常對象的指針,其指向的類常對象的指針,其指向的類對象的值不能通過指針來改變類對象的值不能通過指針來改變Time &t1=t;t1是是Time類對象類對象t的引用,二者指向同一段的引用,二者指向同一段內(nèi)存空間內(nèi)存空間第70頁/共130頁算符撤銷對象。算符撤銷對象。如果已經(jīng)定義了一個(gè)如果已經(jīng)

13、定義了一個(gè)Box類,可以用下類,可以用下面的方法動(dòng)態(tài)地建立一個(gè)對象:面的方法動(dòng)態(tài)地建立一個(gè)對象:第71頁/共130頁的指針變量來存放該地址。如的指針變量來存放該地址。如Box *pt; /定義一個(gè)指向定義一個(gè)指向Box類對象的指針變量類對象的指針變量ptpt=new Box; /在在pt中存放了新建對象的起始地址中存放了新建對象的起始地址第72頁/共130頁不用對象名的,是通過指針訪問的,它不用對象名的,是通過指針訪問的,它主要應(yīng)用于動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),如鏈表。主要應(yīng)用于動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),如鏈表。訪問鏈表中的結(jié)點(diǎn),并不需要通過對象訪問鏈表中的結(jié)點(diǎn),并不需要通過對象名,名,第73頁/共130頁在不再需

14、要使用由在不再需要使用由new建立的對象時(shí),建立的對象時(shí),可以用可以用delete運(yùn)算符予以釋放。如運(yùn)算符予以釋放。如delete pt; /釋放釋放pt指向的內(nèi)存空間指向的內(nèi)存空間第74頁/共130頁第75頁/共130頁是通過成員復(fù)制來完成的,即將一個(gè)對是通過成員復(fù)制來完成的,即將一個(gè)對象的成員值一一復(fù)制給另一對象的對應(yīng)象的成員值一一復(fù)制給另一對象的對應(yīng)成員。對象賦值的一般形式為成員。對象賦值的一般形式為第76頁/共130頁第77頁/共130頁第78頁/共130頁第79頁/共130頁第80頁/共130頁使參數(shù)值不能改變,以免在調(diào)用此函數(shù)使參數(shù)值不能改變,以免在調(diào)用此函數(shù)時(shí)因不慎而使對象值被修

15、改)。時(shí)因不慎而使對象值被修改)。第81頁/共130頁中各數(shù)據(jù)成員。中各數(shù)據(jù)成員。如果用戶自己未定義復(fù)制構(gòu)造函數(shù),則如果用戶自己未定義復(fù)制構(gòu)造函數(shù),則編譯系統(tǒng)會自動(dòng)提供一個(gè)默認(rèn)的復(fù)制構(gòu)編譯系統(tǒng)會自動(dòng)提供一個(gè)默認(rèn)的復(fù)制構(gòu)造函數(shù),其作用只是簡單地復(fù)制類中每造函數(shù),其作用只是簡單地復(fù)制類中每個(gè)數(shù)據(jù)成員。個(gè)數(shù)據(jù)成員。第82頁/共130頁第83頁/共130頁執(zhí)行完第執(zhí)行完第3行后,行后,3個(gè)對象的狀態(tài)完全相個(gè)對象的狀態(tài)完全相同。同。第84頁/共130頁對象時(shí)被調(diào)用,在以下對象時(shí)被調(diào)用,在以下3種情況下需要種情況下需要克隆對象:克隆對象:第85頁/共130頁第86頁/共130頁第87頁/共130頁全局變量

16、的值,很有可能偶一失誤,全全局變量的值,很有可能偶一失誤,全局變量的值就被修改,導(dǎo)致程序的失敗。局變量的值就被修改,導(dǎo)致程序的失敗。因此在實(shí)際工作中很少使用全局變量。因此在實(shí)際工作中很少使用全局變量。如果想在同類的多個(gè)對象之間實(shí)現(xiàn)數(shù)據(jù)如果想在同類的多個(gè)對象之間實(shí)現(xiàn)數(shù)據(jù)共享,也不要用全局對象,可以用靜態(tài)共享,也不要用全局對象,可以用靜態(tài)的數(shù)據(jù)成員。的數(shù)據(jù)成員。第88頁/共130頁第89頁/共130頁為對象所分配的空間中不包括靜態(tài)數(shù)據(jù)為對象所分配的空間中不包括靜態(tài)數(shù)據(jù)成員所占的空間。靜態(tài)數(shù)據(jù)成員是在所成員所占的空間。靜態(tài)數(shù)據(jù)成員是在所有對象之外單獨(dú)開辟空間。只要在類中有對象之外單獨(dú)開辟空間。只要在

17、類中定義了靜態(tài)數(shù)據(jù)成員,即使不定義對象,定義了靜態(tài)數(shù)據(jù)成員,即使不定義對象,也為靜態(tài)數(shù)據(jù)成員分配空間,它可以被也為靜態(tài)數(shù)據(jù)成員分配空間,它可以被引用。引用。第90頁/共130頁(3) 靜態(tài)數(shù)據(jù)成員可以初始化,但只靜態(tài)數(shù)據(jù)成員可以初始化,但只能在類體外進(jìn)行初始化。如能在類體外進(jìn)行初始化。如int Box height=10; /表示對表示對Box類中的數(shù)據(jù)成員初始化類中的數(shù)據(jù)成員初始化第91頁/共130頁例例9.10 第92頁/共130頁第93頁/共130頁態(tài)數(shù)據(jù)成員。態(tài)數(shù)據(jù)成員。第94頁/共130頁個(gè)函數(shù)中定義類,那么其中靜態(tài)數(shù)據(jù)成個(gè)函數(shù)中定義類,那么其中靜態(tài)數(shù)據(jù)成員的作用域就是此函數(shù)內(nèi))。在

18、此作用員的作用域就是此函數(shù)內(nèi))。在此作用域內(nèi),可以通過類名和域運(yùn)算符域內(nèi),可以通過類名和域運(yùn)算符“ ”引引用靜態(tài)數(shù)據(jù)成員,而不論類對象是否存用靜態(tài)數(shù)據(jù)成員,而不論類對象是否存在。在。第95頁/共130頁a而只是用而只是用a的類型而已。的類型而已。第96頁/共130頁數(shù)的根本區(qū)別是:數(shù)的根本區(qū)別是: 非靜態(tài)成員函數(shù)有非靜態(tài)成員函數(shù)有this指針,而靜態(tài)成員函數(shù)沒有指針,而靜態(tài)成員函數(shù)沒有this指指針。由此決定了靜態(tài)成員函數(shù)不能訪問針。由此決定了靜態(tài)成員函數(shù)不能訪問本類中的非靜態(tài)成員。本類中的非靜態(tài)成員。第97頁/共130頁a假設(shè)假設(shè)a已定義為已定義為Box類對象,且在當(dāng)前類對象,且在當(dāng)前作用域

19、內(nèi)有效,則此語句合法。作用域內(nèi)有效,則此語句合法。第98頁/共130頁第99頁/共130頁第100頁/共130頁各對象元素共享的,可以看出:各對象元素共享的,可以看出: 它們它們的值是在不斷變化的,而且無論對哪個(gè)的值是在不斷變化的,而且無論對哪個(gè)對象元素而言,都是相同的,而且始終對象元素而言,都是相同的,而且始終不釋放內(nèi)存空間。不釋放內(nèi)存空間。第101頁/共130頁用靜態(tài)成員函數(shù)用靜態(tài)成員函數(shù)average函數(shù)要用類名函數(shù)要用類名或?qū)ο竺??;驅(qū)ο竺?。?) 請思考:請思考: 如果不將如果不將average函數(shù)函數(shù)定義為靜態(tài)成員函數(shù)行不行?程序能否定義為靜態(tài)成員函數(shù)行不行?程序能否通過編譯?需要作什么修改?為什么要通過編譯?需要作什么修改?為什么要用靜態(tài)成員函數(shù)?請分析其理由。用靜態(tài)成員函數(shù)?請分析其理由。第102頁/共130頁第103頁/共130頁第104頁/共130頁第105頁/共130頁第106頁/共130頁第107頁/共130頁第108頁/共130頁第109頁/共130頁第110頁/共130頁第111頁/共130頁程序第程序第3行就是提前引用聲明,它

溫馨提示

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

評論

0/150

提交評論