![C面向?qū)ο蟪绦蛟O(shè)計(jì)(下)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/6c378977-513b-45aa-8b3c-5ba7b8ebb958/6c378977-513b-45aa-8b3c-5ba7b8ebb9581.gif)
![C面向?qū)ο蟪绦蛟O(shè)計(jì)(下)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/6c378977-513b-45aa-8b3c-5ba7b8ebb958/6c378977-513b-45aa-8b3c-5ba7b8ebb9582.gif)
![C面向?qū)ο蟪绦蛟O(shè)計(jì)(下)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/6c378977-513b-45aa-8b3c-5ba7b8ebb958/6c378977-513b-45aa-8b3c-5ba7b8ebb9583.gif)
![C面向?qū)ο蟪绦蛟O(shè)計(jì)(下)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/6c378977-513b-45aa-8b3c-5ba7b8ebb958/6c378977-513b-45aa-8b3c-5ba7b8ebb9584.gif)
![C面向?qū)ο蟪绦蛟O(shè)計(jì)(下)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/6c378977-513b-45aa-8b3c-5ba7b8ebb958/6c378977-513b-45aa-8b3c-5ba7b8ebb9585.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第九章第九章 類和對(duì)象類和對(duì)象 面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)2022-2-222按鈕對(duì)象:按鈕對(duì)象:按鈕的內(nèi)容、大小,按鈕的字體、圖案等等按鈕的內(nèi)容、大小,按鈕的字體、圖案等等針對(duì)按鈕的各種操作,創(chuàng)建、單擊、雙擊、拖動(dòng)針對(duì)按鈕的各種操作,創(chuàng)建、單擊、雙擊、拖動(dòng)等等班級(jí)對(duì)象:班級(jí)對(duì)象:班級(jí)的靜態(tài)特征,所屬的系和專業(yè)、班級(jí)的人數(shù),班級(jí)的靜態(tài)特征,所屬的系和專業(yè)、班級(jí)的人數(shù),所在的教室等。這種靜態(tài)特征稱為屬性;所在的教室等。這種靜態(tài)特征稱為屬性;班級(jí)的動(dòng)態(tài)特征,如學(xué)習(xí)、開(kāi)會(huì)、體育比賽等,班級(jí)的動(dòng)態(tài)特征,如學(xué)習(xí)、開(kāi)會(huì)、體育比賽等,這種動(dòng)態(tài)特征稱為行為。這種動(dòng)態(tài)特征稱為行為。 2022-2-2
2、23任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,一是屬性任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,一是屬性(attribute);二是行為;二是行為(behavior),即能根據(jù)外界給,即能根據(jù)外界給的信息進(jìn)行相應(yīng)的操作。的信息進(jìn)行相應(yīng)的操作。對(duì)象是由一組屬性和一對(duì)象是由一組屬性和一組行為構(gòu)成的。組行為構(gòu)成的。 面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的這面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的這種思路。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)種思路。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件系統(tǒng)時(shí),復(fù)雜的軟件系統(tǒng)時(shí),首要的問(wèn)題是確定該系統(tǒng)是首要的問(wèn)題是確定該系統(tǒng)是由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。在由哪些對(duì)象組成
3、的,并且設(shè)計(jì)這些對(duì)象。在C+中,中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼即操作代碼)這兩部分這兩部分組成的。組成的。 2022-2-224我們可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把它的我們可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把它的一部分屬性和功能對(duì)外界屏蔽,也就是說(shuō)從一部分屬性和功能對(duì)外界屏蔽,也就是說(shuō)從外界是看不到的、甚至是不可知的。外界是看不到的、甚至是不可知的。 使用對(duì)象的人完全可以不必知道對(duì)象內(nèi)部的使用對(duì)象的人完全可以不必知道對(duì)象內(nèi)部的具體細(xì)節(jié),只需了解其外部功能即可自如地具體細(xì)節(jié),只需了解其外部功能即可自如地操作對(duì)象。操作對(duì)象。 把對(duì)象的內(nèi)部實(shí)現(xiàn)和外部行為分隔開(kāi)來(lái)。把對(duì)象的內(nèi)
4、部實(shí)現(xiàn)和外部行為分隔開(kāi)來(lái)。 2022-2-225傳統(tǒng)的面向過(guò)程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用傳統(tǒng)的面向過(guò)程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。所有的數(shù)據(jù)都是公用的所有的數(shù)據(jù)都是公用的,一個(gè)函數(shù)可以使用任何一組數(shù)據(jù),而一組數(shù)據(jù)又一個(gè)函數(shù)可以使用任何一組數(shù)據(jù),而一組數(shù)據(jù)又能被多個(gè)函數(shù)所使用。程序設(shè)計(jì)者必須考慮每一能被多個(gè)函數(shù)所使用。程序設(shè)計(jì)者必須考慮每一個(gè)細(xì)節(jié),什么時(shí)候?qū)κ裁磾?shù)據(jù)進(jìn)行操作個(gè)細(xì)節(jié),什么時(shí)候?qū)κ裁磾?shù)據(jù)進(jìn)行操作 。面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面對(duì)的是一個(gè)個(gè)對(duì)象。實(shí)際上,每一組數(shù)據(jù)都是有對(duì)的是一個(gè)個(gè)對(duì)象
5、。實(shí)際上,每一組數(shù)據(jù)都是有特定的用途的,是某種操作的對(duì)象。也就是說(shuō),特定的用途的,是某種操作的對(duì)象。也就是說(shuō),一組操作調(diào)用一組數(shù)據(jù)一組操作調(diào)用一組數(shù)據(jù)。 2022-2-226程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:一是程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:一是設(shè)計(jì)所需的各種類和對(duì)象,即決定把哪些數(shù)設(shè)計(jì)所需的各種類和對(duì)象,即決定把哪些數(shù)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)據(jù)和操作封裝在一起;二是考慮怎樣向有關(guān)對(duì)象發(fā)送消息,以完成所需的任務(wù)。對(duì)象發(fā)送消息,以完成所需的任務(wù)。各個(gè)對(duì)各個(gè)對(duì)象的操作完成了,整體任務(wù)也就完成了。象的操作完成了,整體任務(wù)也就完成了。 因此人們?cè)O(shè)想把相關(guān)的數(shù)據(jù)和操作放在因此人們?cè)O(shè)想把相關(guān)的數(shù)
6、據(jù)和操作放在一起,形成一個(gè)整體,與外界相對(duì)分隔一起,形成一個(gè)整體,與外界相對(duì)分隔。這。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的對(duì)象。就是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的對(duì)象。 2022-2-227程序程序= =算法數(shù)據(jù)結(jié)構(gòu)算法數(shù)據(jù)結(jié)構(gòu)在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,人們常使在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,人們常使用這樣的公式來(lái)表述程序用這樣的公式來(lái)表述程序 2022-2-228對(duì)象對(duì)象 = = 算法算法 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)程序程序=(=(對(duì)象對(duì)象+ +對(duì)象對(duì)象+ +對(duì)象對(duì)象+ +)+ )+ 消息消息 消息的作用就是對(duì)對(duì)象的控制。消息的作用就是對(duì)對(duì)象的控制。程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象以及確程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)
7、對(duì)象以及確定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相應(yīng)的操作。應(yīng)的操作。 面向?qū)ο蟮某绦蚪M成:面向?qū)ο蟮某绦蚪M成:2022-2-229每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有相每一個(gè)實(shí)體都是對(duì)象。有一些對(duì)象是具有相同的結(jié)構(gòu)和特性的。同的結(jié)構(gòu)和特性的。 每個(gè)對(duì)象都屬于一個(gè)特定的類型。每個(gè)對(duì)象都屬于一個(gè)特定的類型。 在在C+C+中對(duì)象的類型稱為類中對(duì)象的類型稱為類(class)(class)。類代表類代表了某一批對(duì)象的共性和特征。了某一批對(duì)象的共性和特征。類是對(duì)象的抽類是對(duì)象的抽象,而對(duì)象是類的具體實(shí)例象,而對(duì)象是類的具體實(shí)例(instance)(instance)。
8、 2022-2-2210類是一種復(fù)雜的數(shù)據(jù)類是一種復(fù)雜的數(shù)據(jù)類型類型,它是將,它是將不同類型不同類型的數(shù)據(jù)的數(shù)據(jù)和和與這些數(shù)據(jù)相關(guān)的運(yùn)算與這些數(shù)據(jù)相關(guān)的運(yùn)算封裝在一起封裝在一起的的 集合體。集合體。類的定義類的定義類將一些數(shù)據(jù)及與數(shù)據(jù)相關(guān)的類將一些數(shù)據(jù)及與數(shù)據(jù)相關(guān)的函數(shù)函數(shù)封裝在一封裝在一起,使類中的數(shù)據(jù)得到很好的起,使類中的數(shù)據(jù)得到很好的“保護(hù)保護(hù)”。在。在大型程序中不會(huì)被隨意修改。大型程序中不會(huì)被隨意修改。2022-2-2211類的定義格式:類的定義格式:class 類名類名 private : 成員數(shù)據(jù)成員數(shù)據(jù);成員函數(shù);成員函數(shù); public : 成員數(shù)據(jù)成員數(shù)據(jù);成員函數(shù);成員函數(shù)
9、; protected:成員數(shù)據(jù)成員數(shù)據(jù);成員函數(shù);成員函數(shù);;關(guān)鍵字類名私有公有保護(hù)class Student private : char Name20; float Math; float Chinese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void);分號(hào)不能少2022-2-2212用關(guān)鍵字用關(guān)鍵字priviate限定的成員稱為限定的成員稱為私有成員私有成員,對(duì)私有成員對(duì)私有成員限定
10、在該類的內(nèi)部使用限定在該類的內(nèi)部使用,即,即只只允許該類中的成員函數(shù)使用私有的成員數(shù)允許該類中的成員函數(shù)使用私有的成員數(shù)據(jù)據(jù),對(duì)于私有的成員函數(shù),只能被,對(duì)于私有的成員函數(shù),只能被該類內(nèi)該類內(nèi)的成員函數(shù)調(diào)用的成員函數(shù)調(diào)用;類就相當(dāng)于私有成員的;類就相當(dāng)于私有成員的作用域。作用域。 2022-2-2213用關(guān)鍵字用關(guān)鍵字public限定的成員稱為限定的成員稱為公有成員公有成員,公有成員的數(shù)據(jù)或函數(shù)不受類的限制,公有成員的數(shù)據(jù)或函數(shù)不受類的限制,可以可以在類內(nèi)或類外自由使用在類內(nèi)或類外自由使用;對(duì)類而言是透明的。;對(duì)類而言是透明的。2022-2-2214而用關(guān)鍵字而用關(guān)鍵字protected所限定
11、的成員稱為所限定的成員稱為保護(hù)保護(hù)成員成員,只允許在類內(nèi)及該類的派生類中使用,只允許在類內(nèi)及該類的派生類中使用保護(hù)的數(shù)據(jù)或函數(shù)。即保護(hù)成員的作用域是保護(hù)的數(shù)據(jù)或函數(shù)。即保護(hù)成員的作用域是該類及該類的派生類該類及該類的派生類。2022-2-2215私有成員私有成員公有成員公有成員保護(hù)成員保護(hù)成員類內(nèi)函數(shù)類內(nèi)函數(shù)可以調(diào)用可以調(diào)用可以調(diào)用可以調(diào)用可以調(diào)用可以調(diào)用類外函數(shù)類外函數(shù)不可調(diào)用不可調(diào)用可以調(diào)用可以調(diào)用不可調(diào)用不可調(diào)用私有函數(shù)私有函數(shù) 公有函數(shù)公有函數(shù)保護(hù)函數(shù)保護(hù)函數(shù)類內(nèi)函數(shù)類內(nèi)函數(shù)可以調(diào)用可以調(diào)用 可以調(diào)用可以調(diào)用可以調(diào)用可以調(diào)用類外函數(shù)類外函數(shù)不可調(diào)用不可調(diào)用 可以調(diào)用可以調(diào)用不可調(diào)用不可
12、調(diào)用2022-2-2216每一個(gè)限制詞每一個(gè)限制詞(private等等)在類體中可使用多在類體中可使用多次。一旦使用了限制詞,該限制詞一直有效,次。一旦使用了限制詞,該限制詞一直有效,直到下一個(gè)限制詞開(kāi)始為止。直到下一個(gè)限制詞開(kāi)始為止。如果未加說(shuō)明,類中成員默認(rèn)的訪問(wèn)權(quán)限是如果未加說(shuō)明,類中成員默認(rèn)的訪問(wèn)權(quán)限是private,即私有的。,即私有的。2022-2-2217class Studentchar Name20;float Math;float Chinese; public :float average; void SetName(char *name);void SetMath(fl
13、oat math);void SetChinese(float ch); float GetAverage(void);均為私有權(quán)限均為公有權(quán)限2022-2-2218class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;xySetxy()Print()A私有數(shù)據(jù)私有數(shù)據(jù)公有函數(shù)公有函數(shù)在在類外不能直接使用類外不能直接使用 x 或或 y ,必須通過(guò),必須通過(guò)Setxy()給給 x 或或 y 賦值,通過(guò)賦值,通過(guò)Print()輸出輸出 x 或或 y 。2022
14、-2-2219成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說(shuō)成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說(shuō)明明函數(shù)原型函數(shù)原型,再在類體外定義函數(shù)體。,再在類體外定義函數(shù)體。class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;在類體內(nèi)定義成員函數(shù)2022-2-2220class A float x, y; public: void Setxy(float a,float b); void Print(void);;void A:Setxy(float a,flo
15、at b) x=a; y=b; void A:Print(void) coutxtyendl; 在類體內(nèi)說(shuō)明成員函數(shù)原型在類體外定義成員函數(shù)2022-2-2221 : (). /函數(shù)體函數(shù)體在類體外定義成員函數(shù)的格式:在類體外定義成員函數(shù)的格式:void A:Setxy(float a,float b) x=a; y=b; 函數(shù)類型類名函數(shù)名形參列表函數(shù)體2022-2-2222在定義一個(gè)類時(shí),要注意如下幾點(diǎn):在定義一個(gè)類時(shí),要注意如下幾點(diǎn):1、類具有封裝性,并且類只是定義了一種結(jié)構(gòu)(樣板),、類具有封裝性,并且類只是定義了一種結(jié)構(gòu)(樣板),所以所以類中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字類中的任何成
16、員數(shù)據(jù)均不能使用關(guān)鍵字extern,auto或或register限定其存儲(chǔ)類型限定其存儲(chǔ)類型。2、在定義類時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類型,、在定義類時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類型,并不并不為類分配存儲(chǔ)空間為類分配存儲(chǔ)空間,所以,在定義類中的數(shù)據(jù)成員時(shí),所以,在定義類中的數(shù)據(jù)成員時(shí),不能對(duì)其初始化不能對(duì)其初始化。如:。如:class Test int x=5,y=6; /是不允許的是不允許的 extern float x; /是不允許的是不允許的 2022-2-2223在在C+語(yǔ)言中,語(yǔ)言中,結(jié)構(gòu)體類型結(jié)構(gòu)體類型只是類的一個(gè)特只是類的一個(gè)特例。結(jié)構(gòu)體類型與類的唯一的區(qū)別在于:例。結(jié)構(gòu)體類型與
17、類的唯一的區(qū)別在于:在在類中,其成員的缺省的存取權(quán)限是私有的;類中,其成員的缺省的存取權(quán)限是私有的;而在結(jié)構(gòu)體類型中,其成員的缺省的存取權(quán)而在結(jié)構(gòu)體類型中,其成員的缺省的存取權(quán)限是公有的。限是公有的。 2022-2-2224 內(nèi)聯(lián)成員函數(shù)內(nèi)聯(lián)成員函數(shù) 當(dāng)我們定義一個(gè)類時(shí),當(dāng)我們定義一個(gè)類時(shí),可以可以在類中直接定義函數(shù)體在類中直接定義函數(shù)體。這時(shí)成員函。這時(shí)成員函數(shù)在編譯時(shí)是作為數(shù)在編譯時(shí)是作為內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)來(lái)實(shí)現(xiàn)的。來(lái)實(shí)現(xiàn)的。 同時(shí),我們也可以在類體外定義類的內(nèi)聯(lián)成員函數(shù),在類體內(nèi)說(shuō)明同時(shí),我們也可以在類體外定義類的內(nèi)聯(lián)成員函數(shù),在類體內(nèi)說(shuō)明函數(shù),函數(shù),在類體外定義時(shí),在成員函數(shù)的定義前面加
18、上關(guān)鍵字在類體外定義時(shí),在成員函數(shù)的定義前面加上關(guān)鍵字inline。 class A float x, y; public: void Setxy(float a,float b); void Print(void);;inline void A:Setxy(float a,float b) x=a; y=b; inline void A:Print(void) coutxtyendl; 說(shuō)明該成員函數(shù)為內(nèi)聯(lián)2022-2-2225對(duì)象對(duì)象只有在定義了屬于類的變量后,系統(tǒng)才會(huì)為只有在定義了屬于類的變量后,系統(tǒng)才會(huì)為類的類的變量變量分配空間。分配空間。在定義類時(shí),只是定義了一種在定義類時(shí),只是定義
19、了一種數(shù)據(jù)類型數(shù)據(jù)類型,即即說(shuō)明程說(shuō)明程序中可能會(huì)出現(xiàn)該類型的數(shù)據(jù),序中可能會(huì)出現(xiàn)該類型的數(shù)據(jù),并不為類分配存儲(chǔ)并不為類分配存儲(chǔ)空間??臻g。類的變量我們稱之為類的變量我們稱之為對(duì)象對(duì)象。對(duì)象是類的實(shí)例對(duì)象是類的實(shí)例,定義對(duì)象之前,一定要先說(shuō)明該,定義對(duì)象之前,一定要先說(shuō)明該對(duì)象的類。對(duì)象的類。2022-2-2226不同對(duì)象占據(jù)內(nèi)存中的不同區(qū)域,它們所保存的不同對(duì)象占據(jù)內(nèi)存中的不同區(qū)域,它們所保存的數(shù)據(jù)各不相同,但數(shù)據(jù)各不相同,但對(duì)成員數(shù)據(jù)進(jìn)行操作的成員函對(duì)成員數(shù)據(jù)進(jìn)行操作的成員函數(shù)的程序代碼均是一樣的數(shù)的程序代碼均是一樣的。 存儲(chǔ)類型存儲(chǔ)類型類名類名 對(duì)象對(duì)象1,對(duì)象,對(duì)象2,.;Studen
20、t st1,st2; 對(duì)象的定義格式:對(duì)象的定義格式:類名對(duì)象名在建立對(duì)象時(shí),只為對(duì)象分配用于保存數(shù)據(jù)成員的內(nèi)存空在建立對(duì)象時(shí),只為對(duì)象分配用于保存數(shù)據(jù)成員的內(nèi)存空間,間,而成員函數(shù)的代碼為該類的每一個(gè)對(duì)象所共享而成員函數(shù)的代碼為該類的每一個(gè)對(duì)象所共享。 2022-2-2227對(duì)象的定義方法同結(jié)構(gòu)體定義變量的方法一樣,對(duì)象的定義方法同結(jié)構(gòu)體定義變量的方法一樣,也分三種,也分三種,當(dāng)類中有數(shù)據(jù)成員的訪問(wèn)權(quán)限為私有當(dāng)類中有數(shù)據(jù)成員的訪問(wèn)權(quán)限為私有時(shí),不允許對(duì)對(duì)象進(jìn)行初始化時(shí),不允許對(duì)對(duì)象進(jìn)行初始化。class A float x,y;public: void Setxy( float a, flo
21、at b ) x=a; y=b; void Print(void) coutxtyendl; a1,a2;void main(void) A a3,a4;定義全局對(duì)象定義局部對(duì)象2022-2-2228對(duì)象的使用對(duì)象的使用一個(gè)對(duì)象的成員就是該對(duì)象的類所定義的成員,一個(gè)對(duì)象的成員就是該對(duì)象的類所定義的成員,有有成員數(shù)據(jù)和成員函數(shù)成員數(shù)據(jù)和成員函數(shù),引用時(shí)同結(jié)構(gòu)體變量類,引用時(shí)同結(jié)構(gòu)體變量類似,用似,用“.”運(yùn)算符。運(yùn)算符。2022-2-2229class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b;
22、void Print(void) coutxtyendl; ;void main(void) A a1,a2; /定義對(duì)象定義對(duì)象 a1.m=10; a1.n=20; /為公有成員數(shù)據(jù)賦值為公有成員數(shù)據(jù)賦值 a1.Setxy(2.0 , 5.0); /為私有成員數(shù)據(jù)賦值為私有成員數(shù)據(jù)賦值 a1.Print();Print()Setxy()a1nmyxPrint()Setxy()a2nmyx10202.05.0輸出:輸出: 2 52022-2-2230用成員選擇運(yùn)算符用成員選擇運(yùn)算符“.”只能訪問(wèn)對(duì)象的只能訪問(wèn)對(duì)象的公有公有成員成員,而不能訪問(wèn)對(duì)象的私有成員或保護(hù)成,而不能訪問(wèn)對(duì)象的私有成員或保
23、護(hù)成員。員。若要訪問(wèn)對(duì)象的私有的數(shù)據(jù)成員,只能若要訪問(wèn)對(duì)象的私有的數(shù)據(jù)成員,只能通過(guò)對(duì)象的公有成員函數(shù)來(lái)獲取通過(guò)對(duì)象的公有成員函數(shù)來(lái)獲取。 2022-2-2231class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=10; a1.n=20; /為公有成員數(shù)據(jù)賦值為公有成員數(shù)據(jù)賦值 a1.x=2; a1.y=5; a1.Setxy(2.0,5.0); a1.Print();必
24、須通過(guò)類內(nèi)公有函數(shù)訪問(wèn)私有數(shù)據(jù)成員非法,私有成員不能在類外訪問(wèn)2022-2-2232同類型的對(duì)象之間可以整體賦值,這種賦值與對(duì)象的成員的訪問(wèn)同類型的對(duì)象之間可以整體賦值,這種賦值與對(duì)象的成員的訪問(wèn)權(quán)限無(wú)關(guān)。權(quán)限無(wú)關(guān)。class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=10; a1.n=20;/為公有成員數(shù)據(jù)賦值為公有成員數(shù)據(jù)賦值 a1.Setxy(2.0,5.0); a2
25、=a1; a1.Print(); a2.Print();同類型的對(duì)象之間可以整體賦值相當(dāng)于成員數(shù)相當(dāng)于成員數(shù)據(jù)間相互賦值據(jù)間相互賦值2022-2-2233對(duì)象可以作函數(shù)的入口參數(shù)(實(shí)參、形參),也對(duì)象可以作函數(shù)的入口參數(shù)(實(shí)參、形參),也可以作函數(shù)的出口參數(shù)。這與一般變量作為函數(shù)可以作函數(shù)的出口參數(shù)。這與一般變量作為函數(shù)的參數(shù)是完全相同的。的參數(shù)是完全相同的。 可以定義類類型的指針,類類型的引用,對(duì)象數(shù)可以定義類類型的指針,類類型的引用,對(duì)象數(shù)組,指向類類型的指針數(shù)組和指向一維或多維數(shù)組,指向類類型的指針數(shù)組和指向一維或多維數(shù)組的指針變量組的指針變量 一個(gè)類的對(duì)象,可作為另一個(gè)類的成員一個(gè)類的
26、對(duì)象,可作為另一個(gè)類的成員 2022-2-2234類體的區(qū)域稱為類體的區(qū)域稱為類作用域類作用域。類的成員函數(shù)與。類的成員函數(shù)與成員數(shù)據(jù),其作用域都是屬于類的作用域,成員數(shù)據(jù),其作用域都是屬于類的作用域,僅在該類的范圍內(nèi)有效,僅在該類的范圍內(nèi)有效,故不能在主函數(shù)中故不能在主函數(shù)中直接通過(guò)函數(shù)名和成員名來(lái)調(diào)用函數(shù)直接通過(guò)函數(shù)名和成員名來(lái)調(diào)用函數(shù)。 類作用域、類類型的作用域和對(duì)象的作用域類作用域、類類型的作用域和對(duì)象的作用域 2022-2-2235class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b;
27、 void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=20; a1.n=10; a1.Setxy(2.0, 5.0); a1.Print(); void main(void) A a1,a2; m=20; n=10; Setxy(2.0, 5.0); Print(); 用對(duì)象名調(diào)用不能直接調(diào)用2022-2-2236類類型的作用域:類類型的作用域:在函數(shù)定義之外定義的類,在函數(shù)定義之外定義的類,其類名的作用域?yàn)槠漕惷淖饔糜驗(yàn)槲募饔糜蛭募饔糜颍欢诤瘮?shù)體;而在函數(shù)體內(nèi)定義的類,其類名的作用域?yàn)閮?nèi)定義的類,其類名的作用域?yàn)閴K
28、作用域塊作用域 。對(duì)象的作用域?qū)ο蟮淖饔糜蚺c前面介紹的變量作用域完全與前面介紹的變量作用域完全相同相同 , 全局對(duì)象、局部對(duì)象、局部靜態(tài)對(duì)象全局對(duì)象、局部對(duì)象、局部靜態(tài)對(duì)象等。等。2022-2-2237class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; a3,a4;void main(void) A a1,a2; class B int i,j; public : void Setij(int m, int n) i=m; j=n;
29、 ; B b1,b2; a1.Setxy(2.0, 5.0); b1.Setij(1,2);類A:文件作用域,在整個(gè)文件中有效類B:塊作用域,在函數(shù)內(nèi)有效。全局對(duì)象局部對(duì)象2022-2-2238類的嵌套在定義一個(gè)類時(shí)在定義一個(gè)類時(shí), 在其類體中又包含了一個(gè)類在其類體中又包含了一個(gè)類的完整定義,稱為類的嵌套的完整定義,稱為類的嵌套 。類是允許嵌套定義的類是允許嵌套定義的 。2022-2-2239class A class B int i,j; public : void Setij(int m, int n) i=m; j=n; ; float x,y;public: B b1,b2; void
30、 Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;類B包含在類A中,為嵌套定義嵌套類的對(duì)象在類在類A的定義中,并不為的定義中,并不為b1,b2分分配空間,配空間,只有在定義類只有在定義類A的對(duì)象的對(duì)象時(shí),才為嵌套類的對(duì)象分配空間時(shí),才為嵌套類的對(duì)象分配空間。嵌套類的作用域在類嵌套類的作用域在類A的定義結(jié)的定義結(jié)束時(shí)結(jié)束束時(shí)結(jié)束。2022-2-2240類的對(duì)象如何引用私有數(shù)據(jù)成員類的對(duì)象如何引用私有數(shù)據(jù)成員1、通過(guò)公有函數(shù)為私有成員賦值、通過(guò)公有函數(shù)為私有成員賦值class Testint x , y; pub
31、lic: void Setxy(int a, int b)x=a;y=b; void Printxy(void) coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3, 5); p1.Printxy( );調(diào)用公有函數(shù)為私有對(duì)象賦值2022-2-22412、利用指針訪問(wèn)私有數(shù)據(jù)成員利用指針訪問(wèn)私有數(shù)據(jù)成員class Testint x,y; public: void Setxy(int a, int b) x=a;y=b; void Getxy(int *px, int *py) *px=x;*py=y; /提取提取x,y值值 voi
32、d Printxy(void)coutx=xt“= yyendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; p1.Getxy(&a, &b);/將將 a=x, b=y coutatbendl; Setxy()Getxy()Printxy()xy35ba&apx&bpy35輸出:輸出: 3 52022-2-22423、利用函數(shù)訪問(wèn)私有數(shù)據(jù)成員、利用函數(shù)訪問(wèn)私有數(shù)據(jù)成員class Testint x,y; public: void Setxy(int a, int b) x=a;y=b; int Ge
33、tx(void) return x; /返回返回x值值 int Gety(void) return y; /返回返回y值值 void Printxy(void)coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; a=p1.Getx( ); b=p1.Gety(); /將將 a=x, b=y coutatbendl; 函數(shù)值就是私有函數(shù)值就是私有成員變量的值成員變量的值2022-2-22434、利用引用訪問(wèn)私有數(shù)據(jù)成員、利用引用訪問(wèn)私有數(shù)據(jù)成員class Testint x,y; public: void S
34、etxy(int a, int b)x=a; y=b; void Getxy(int &px, int &py) px=x; py=y; /提取提取x,y值值 void Printxy(void)coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; p1.Getxy(a, b);/將將 a=x, b=y coutatbendl; Setxy()Getxy()Printxy()xy35bapxpy35輸出:輸出: 3 52022-2-2244類引用舉例(三角形類:三角形的三邊及與三邊相關(guān)的運(yùn)算)
35、類引用舉例(三角形類:三角形的三邊及與三邊相關(guān)的運(yùn)算)class Triangleprivate:float a,b,c; /三邊為私有成員數(shù)據(jù)三邊為私有成員數(shù)據(jù)public:void Setabc(float x, float y, float z);/置三邊的值置三邊的值void Getabc(float &x, float &y, float &z);/取三邊的值取三邊的值float Perimeter(void);/計(jì)算三角形的周長(zhǎng)計(jì)算三角形的周長(zhǎng)float Area(void);/計(jì)算三角形的面積計(jì)算三角形的面積void Print(void);/打印相關(guān)信息
36、打印相關(guān)信息;2022-2-2245void Triangle:Setabc (float x,float y,float z) a =x; b=y; c=z; /置三邊的值置三邊的值void Triangle:Getabc (float &x,float &y,float &z) /取三邊的值取三邊的值x=a; y=b;z=c;float Triangle:Perimeter (void) return (a+b+c)/2; /計(jì)算三角形的周長(zhǎng)計(jì)算三角形的周長(zhǎng)float Triangle:Area (void) /計(jì)算三角形的面積計(jì)算三角形的面積float area,
37、p; p= Perimeter(); area=sqrt(p-a)*(p-b)*(p-c)*p); return area;void Triangle:Print(void) /打印相關(guān)信息打印相關(guān)信息coutPeri=Perimeter()tArea=Area()endl;2022-2-2246void main(void)Triangle Tri1;/定義三角形類的一個(gè)實(shí)例(對(duì)象)定義三角形類的一個(gè)實(shí)例(對(duì)象)Tri1.Setabc (4,5,6);/為三邊置初值為三邊置初值float x,y,z;Tri1.Getabc (x,y,z); /將三邊的值為將三邊的值為x,y,z賦值賦值cou
38、txtytzendl;cout“s=”Tri1.Perimeter ()endl;/求三角形的周長(zhǎng)求三角形的周長(zhǎng)cout“Area=”Tri1.Area ()endl;/求三角形的面積求三角形的面積coutTri1:endl;Tri1.Print ();/打印有關(guān)信息打印有關(guān)信息2022-2-2247類引用舉例(學(xué)生類:學(xué)生的姓名成績(jī)及相關(guān)的運(yùn)算)類引用舉例(學(xué)生類:學(xué)生的姓名成績(jī)及相關(guān)的運(yùn)算)class Stuchar Name20;/學(xué)生姓名學(xué)生姓名float Chinese;/語(yǔ)文成績(jī)語(yǔ)文成績(jī)float Math;/數(shù)學(xué)成績(jī)數(shù)學(xué)成績(jī)public:float Average(void);
39、/計(jì)算平均成績(jī)計(jì)算平均成績(jī)float Sum(void);/計(jì)算總分計(jì)算總分void Show(void);/打印信息打印信息void SetStudent(char*,float,float);/為對(duì)象置姓名、成績(jī)?yōu)閷?duì)象置姓名、成績(jī)void SetName(char *);/為對(duì)象置姓名為對(duì)象置姓名char *GetName(void);/取得學(xué)生姓名取得學(xué)生姓名;2022-2-2248float Stu:Average(void) return (Chinese+Math)/2;/平均成績(jī)float Stu:Sum(void) return Chinese+Math; /總分void St
40、u:Show(void) /打印信息 coutName: NameendlScore: Chineset Mathtaverage: Average()tSum: Sum()endl; void Stu:SetStudent(char *name,float chinese,float math)strcpy(Name,name);/置姓名Chinese=chinese;/置語(yǔ)文成績(jī)Math=math;/置數(shù)學(xué)成績(jī)char * Stu:GetName(void) return Name;/返回姓名2022-2-2249void main(void)Stu p1,p2;p1.SetStudent
41、(“Li qing”,98,96);/對(duì)象置初值對(duì)象置初值p2.SetStudent(Wang Gang,90,88); /對(duì)象置初值對(duì)象置初值p1.Show();/打印信息打印信息p2.Show();/打印信息打印信息p1.SetName (“Zhao jian”);/重新置重新置p1對(duì)象的名字對(duì)象的名字p1.Show (); cout“p1.Name: ”p1.GetName ()endl;/打印對(duì)象的名字打印對(duì)象的名字 cout“p1.average: ”p1.Average ()endl;/打印對(duì)象的成績(jī)打印對(duì)象的成績(jī)2022-2-2250成員函數(shù)的重載成員函數(shù)的重載 類中的成員函數(shù)與
42、前面介紹的普通函數(shù)一樣,類中的成員函數(shù)與前面介紹的普通函數(shù)一樣,成員函數(shù)可以成員函數(shù)可以帶有缺省的參數(shù)帶有缺省的參數(shù),也可以,也可以重載重載成員函數(shù)成員函數(shù) 。重載時(shí),函數(shù)的形參必須在重載時(shí),函數(shù)的形參必須在類型類型或或數(shù)目數(shù)目上不上不同。同。2022-2-2251class Testint x , y;int m, n; public: void Setxy(int a, int b)x=a;y=b; void Setxy(int a,int b,int c,int d) x=a;y=b;m=c;n=d; void Printxy(int x)cout “m=mt“n=nendl; void
43、 Printxy(void) coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3, 5); p2.Setxy(10,20,30,40);/參數(shù)不同參數(shù)不同 p1.Printxy(); p2.Printxy(); p2.Printxy(2);/參數(shù)、類型不同參數(shù)、類型不同輸出:輸出:x=3 y=5x=10 y=20m=30 n=402022-2-2252class Stuchar Name20;float Chinese;float Math;float English;float Physical;public:float Aver
44、age(void);/語(yǔ)文、數(shù)學(xué)平均成績(jī)float Average(int n);/四門課的平均成績(jī)float Sum(void);/語(yǔ)文、數(shù)學(xué)總分float Sum(int n);/四門課總分void Show(void);void SetStudent(char*,float,float);/置姓名、語(yǔ)文、數(shù)學(xué)初值void SetStudent(char *, float,float,float,float);/置姓名、成績(jī)void SetName(char *);char *GetName(void);2022-2-2253可以有缺省參數(shù)的成員函數(shù),若形參不完全可以有缺省參數(shù)的成員函數(shù),
45、若形參不完全缺省,則必須從形參的缺省,則必須從形參的右邊右邊開(kāi)始缺省。開(kāi)始缺省。2022-2-2254缺省參數(shù)的成員函數(shù)缺省參數(shù)的成員函數(shù)class Afloat x,y;public:float Sum(void) return x+y; void Set(float a,float b=10.0) x=a;y=b; void Print(void) coutx=xty=yendl; ;void main(void)A a1,a2;a1.Set (2.0,4.0);couta1: ; a1.Print ();couta1.sum=a1.Sum ()endl;a2.Set(20.0);cout
46、a2: ; a2.Print ();couta2.sum=a2.Sum ()endl;不缺省參數(shù),a1.x=2, a1.y=4缺省參數(shù),a2.x=20, a2.y=102022-2-2255定義類的指針及如何用指針來(lái)引用對(duì)象定義類的指針及如何用指針來(lái)引用對(duì)象class Afloat x,y;public:float Sum(void) return x+y; void Set(float a,float b) x=a;y=b; void Print(void) coutx=xty=ySet(2.0, 3.0); /通過(guò)指針引用對(duì)象的成員函數(shù)通過(guò)指針引用對(duì)象的成員函數(shù) p-Print(); co
47、utSum()endl;a2.Set(10.0, 20.0); a2.Print();Setxy()Getxy()Printxy()xy2.03.0pa12022-2-2256定義類的數(shù)組及數(shù)組中元素的引用定義類的數(shù)組及數(shù)組中元素的引用void main(void)Stu stu3;/定義類的數(shù)組定義類的數(shù)組Stu *pstu;/定義類的指針定義類的指針pstu=stu;/為指針賦值為指針賦值int i;stu0.SetStudent (“A”,90,90);/通過(guò)數(shù)組元素的引用賦值通過(guò)數(shù)組元素的引用賦值stu1.SetStudent (B,80,80);stu2.SetStudent (C,
48、70,70);for(i=0;iShow ();/指針變量指向數(shù)組元素指針變量指向數(shù)組元素pstu+;/指針變量加一,指向下一元素指針變量加一,指向下一元素stupstupstu2022-2-2257返回引用類型的成員函數(shù)返回引用類型的成員函數(shù)(可以返回私有數(shù)據(jù)成員的引用可以返回私有數(shù)據(jù)成員的引用)class Afloat x,y;public:float &Getx(void ) return x; /返回返回x的引用的引用void Set(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;void main(void
49、)A a1,a2;a1.Set (3,5);couta1: ; a1.Print ();a1.Getx()=30;/將將a1對(duì)象中的對(duì)象中的x成員賦值成員賦值coutnMax)/空間不夠,動(dòng)態(tài)開(kāi)辟存儲(chǔ)空間空間不夠,動(dòng)態(tài)開(kāi)辟存儲(chǔ)空間int *list;list=new intnMax+1; /開(kāi)辟一較大的空間開(kāi)辟一較大的空間for(int i=0;ix=a;this-y=b;系統(tǒng)自動(dòng)將對(duì)象的指系統(tǒng)自動(dòng)將對(duì)象的指針帶到成員函數(shù)中針帶到成員函數(shù)中2022-2-2263當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程序先編譯程序先將對(duì)象的地址賦給將對(duì)象的地址賦給this指針,然后調(diào)用成員
50、指針,然后調(diào)用成員函數(shù),函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員時(shí),也隱每次成員函數(shù)存取數(shù)據(jù)成員時(shí),也隱含使用含使用this指針。指針。this指針具有如下形式的缺省說(shuō)明:指針具有如下形式的缺省說(shuō)明: Stu *const this; 類名即即 this 指針里的地址是一個(gè)常指針里的地址是一個(gè)常量量2022-2-2264class Spublic : char *strp; int length; void Ini(char *s); void Print(void); void Copy(S &s);void main(void)S s1,s2;s1.Ini(“China”); s2.Ini(
51、“”);s1.Print(); s2.Copy(s1); s2.Print(); s1.Copy(s1);void S:Ini(char *s) length=strlen(s); strp=new charlength+1; strcpy(strp, s);void S:Print(void) coutstrpendl; void S:Copy(S &s) if(strp) delete strp; length= s.length; strp=new charlength+1; strcpy(strp, s.strp); 2022-2-2265void S:Ini(char *s)
52、 length=strlen(s); strp=new charlength+1; strcpy(strp, s);void S:Copy(S &s) if(strp) delete strp; length= s.length; strp=new charlength+1; strcpy(strp, s.strp); *strplengthIni( )Print( )Copy( )S字符串首址字符串長(zhǎng)度s1.Ini(“China”);求長(zhǎng)度對(duì)象動(dòng)態(tài)開(kāi)辟空間空間賦值length=5strpC hina 0s2.Copy(s1);0strpC hina 02022-2-2266void
53、S:Copy(S &s) if(strp) delete strp; length= s.length; strp=new charlength+1; strcpy(strp, s.strp); s1.Copy(s1);strpC hina 0length=5隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)隨機(jī)失去了原來(lái)的內(nèi)容,不能正確復(fù)制2022-2-2267void S:Copy(S &s) if(&s=this) cout“不能復(fù)制本身不能復(fù)制本身n”; else if(strp) delete strp; length= s.length; strp=new cha
54、rlength+1; strcpy(strp, s.strp); 判斷是否是自身復(fù)制this為正在調(diào)用該函數(shù)的對(duì)象的地址s2.Copy(s1);s1.Copy(s1);if(s=*this)2022-2-2268第十章第十章 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)2022-2-2269構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類體中說(shuō)明的兩種構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類體中說(shuō)明的兩種特殊的成員函數(shù)特殊的成員函數(shù)。構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí),使用給定的值來(lái)構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí),使用給定的值來(lái)將對(duì)象初始化。將對(duì)象初始化。析構(gòu)函數(shù)的功能正好相反,是在系統(tǒng)釋放對(duì)析構(gòu)函數(shù)的功能正好相反,是在系統(tǒng)釋放對(duì)象前,對(duì)對(duì)象做一些善后工作象前
55、,對(duì)對(duì)象做一些善后工作。2022-2-2270構(gòu)造函數(shù)是類的成員函數(shù),系統(tǒng)約定構(gòu)造函構(gòu)造函數(shù)是類的成員函數(shù),系統(tǒng)約定構(gòu)造函數(shù)名必須與類名相同。數(shù)名必須與類名相同。構(gòu)造函數(shù)提供了初始構(gòu)造函數(shù)提供了初始化對(duì)象的一種簡(jiǎn)單的方法化對(duì)象的一種簡(jiǎn)單的方法。構(gòu)造函數(shù)構(gòu)造函數(shù)可以帶參數(shù)、可以重載可以帶參數(shù)、可以重載,同時(shí)沒(méi)有,同時(shí)沒(méi)有返回值。返回值。2022-2-2271class Afloat x,y;public:A(float a,float b) x=a; y=b;/構(gòu)造函數(shù),初始化對(duì)象構(gòu)造函數(shù),初始化對(duì)象float Sum(void) return x+y; void Set(float a,flo
56、at b) x=a;y=b;Print(void) coutx=xty=yendl;void main(void)A a1(2.0, 3.0);/定義時(shí)調(diào)用構(gòu)造函數(shù)初始化定義時(shí)調(diào)用構(gòu)造函數(shù)初始化A a2(1.0,2.0);a2.Set(10.0, 20.0); /利用成員函數(shù)重新為對(duì)象賦值利用成員函數(shù)重新為對(duì)象賦值 a1.Print();a2.Print();2022-2-2272對(duì)構(gòu)造函數(shù),說(shuō)明以下幾點(diǎn):對(duì)構(gòu)造函數(shù),說(shuō)明以下幾點(diǎn):1.構(gòu)造函數(shù)的函數(shù)名必須與類名相同構(gòu)造函數(shù)的函數(shù)名必須與類名相同。構(gòu)造構(gòu)造函數(shù)的主要作用是完成初始化對(duì)象的數(shù)據(jù)成函數(shù)的主要作用是完成初始化對(duì)象的數(shù)據(jù)成員以及其它的初
57、始化工作員以及其它的初始化工作。2. 在定義構(gòu)造函數(shù)時(shí),在定義構(gòu)造函數(shù)時(shí),不能指定函數(shù)返回值不能指定函數(shù)返回值的類型,也不能指定為的類型,也不能指定為void類型類型。3. 一個(gè)類可以定義若干個(gè)構(gòu)造函數(shù)。當(dāng)定義一個(gè)類可以定義若干個(gè)構(gòu)造函數(shù)。當(dāng)定義多個(gè)構(gòu)造函數(shù)時(shí),多個(gè)構(gòu)造函數(shù)時(shí),必須滿足函數(shù)重載的原則。必須滿足函數(shù)重載的原則。2022-2-22734.構(gòu)造函數(shù)可以指定參數(shù)的缺省值。構(gòu)造函數(shù)可以指定參數(shù)的缺省值。5.若定義的類要說(shuō)明該類的對(duì)象時(shí),構(gòu)造函若定義的類要說(shuō)明該類的對(duì)象時(shí),構(gòu)造函數(shù)必須是數(shù)必須是公有的成員函數(shù)公有的成員函數(shù)。如果定義的類僅。如果定義的類僅用于派生其它類時(shí),則可將構(gòu)造函數(shù)定義
58、為用于派生其它類時(shí),則可將構(gòu)造函數(shù)定義為保護(hù)的成員函數(shù)保護(hù)的成員函數(shù)。由于構(gòu)造函數(shù)屬于類的成員函數(shù),它對(duì)私有由于構(gòu)造函數(shù)屬于類的成員函數(shù),它對(duì)私有數(shù)據(jù)成員、保護(hù)的數(shù)據(jù)成員和公有的數(shù)據(jù)成數(shù)據(jù)成員、保護(hù)的數(shù)據(jù)成員和公有的數(shù)據(jù)成員員均能進(jìn)行初始化均能進(jìn)行初始化。2022-2-2274class Afloat x,y;public:A(float a, float b=10) x=a; y=b; A() x=0; y=0; void Print(void) coutxtyendl; ;void main(void) A a1, a2(20.0), a3(3.0, 7.0); a1.Print(); a
59、2.Print(); a3.Print(); 00201037帶缺省參數(shù)的構(gòu)造函數(shù)不帶參數(shù)的構(gòu)造函數(shù)每一個(gè)對(duì)象必每一個(gè)對(duì)象必須要有相應(yīng)的須要有相應(yīng)的構(gòu)造函數(shù)構(gòu)造函數(shù)2022-2-2275每一個(gè)對(duì)象必須要有相應(yīng)的構(gòu)造函數(shù)每一個(gè)對(duì)象必須要有相應(yīng)的構(gòu)造函數(shù)若沒(méi)有顯式定義構(gòu)造函數(shù),若沒(méi)有顯式定義構(gòu)造函數(shù),系統(tǒng)默認(rèn)缺省的構(gòu)造函數(shù)。系統(tǒng)默認(rèn)缺省的構(gòu)造函數(shù)。class Afloat x,y;public:A() void Print(void) coutxtyendl; ;隱含的缺省的構(gòu)造函數(shù)A a1, a2;只允許這樣定義對(duì)象對(duì)象開(kāi)辟了空間,但沒(méi)有初始化對(duì)象開(kāi)辟了空間,但沒(méi)有初始化2022-2-2276對(duì)
60、局部對(duì)象,靜態(tài)對(duì)象,全局對(duì)象的初始化對(duì)局部對(duì)象,靜態(tài)對(duì)象,全局對(duì)象的初始化對(duì)于局部對(duì)象,每次定義對(duì)象時(shí),都要調(diào)用對(duì)于局部對(duì)象,每次定義對(duì)象時(shí),都要調(diào)用構(gòu)造函數(shù)。構(gòu)造函數(shù)。對(duì)于靜態(tài)對(duì)象,是在首次定義對(duì)象時(shí),調(diào)用對(duì)于靜態(tài)對(duì)象,是在首次定義對(duì)象時(shí),調(diào)用構(gòu)造函數(shù)的,且由于對(duì)象一直存在,構(gòu)造函數(shù)的,且由于對(duì)象一直存在,只調(diào)用只調(diào)用一次構(gòu)造函數(shù)一次構(gòu)造函數(shù)。對(duì)于全局對(duì)象,是對(duì)于全局對(duì)象,是在在main函數(shù)執(zhí)行之前調(diào)用函數(shù)執(zhí)行之前調(diào)用構(gòu)造函數(shù)的構(gòu)造函數(shù)的。2022-2-2277class A int x,y; public: A(int a) x=a; cout“1n”; A(int a, int b) x=a,y=b;cout“2n”;A a1(3);void f(void) A b(2,3);void main(void) A a2(4,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 26《好的故事》說(shuō)課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 1場(chǎng)景歌說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- 2024年秋一年級(jí)道德與法治下冊(cè) 第二單元 我和大自然 5 風(fēng)兒輕輕吹說(shuō)課稿 新人教版
- 18古詩(shī)三首浪淘沙(其一)說(shuō)課稿-2024-2025學(xué)年六年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 8 設(shè)計(jì)制作小車(二) 說(shuō)課稿-2024-2025學(xué)年科學(xué)四年級(jí)上冊(cè)教科版
- 23《月光曲》說(shuō)課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 1 24時(shí)計(jì)時(shí)法(說(shuō)課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版001
- 2023九年級(jí)道德與法治上冊(cè) 第三單元 文明與家園 第五課 守望精神家園第2框 凝聚價(jià)值追求說(shuō)課稿 新人教版
- 2025北京市飼料采購(gòu)合同新
- 2025建造船舶所要用到的合同
- 農(nóng)產(chǎn)品貯運(yùn)與加工考試題(附答案)
- 學(xué)校財(cái)務(wù)年終工作總結(jié)4
- 2025年人民教育出版社有限公司招聘筆試參考題庫(kù)含答案解析
- 康復(fù)醫(yī)學(xué)治療技術(shù)(士)復(fù)習(xí)題及答案
- 《血管性血友病》課件
- 2025年汽車加氣站作業(yè)人員安全全國(guó)考試題庫(kù)(含答案)
- 2024年司法考試完整真題及答案
- 高三日語(yǔ)一輪復(fù)習(xí)日語(yǔ)助詞「に」和「を」的全部用法課件
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 2024年執(zhí)業(yè)藥師繼續(xù)教育專業(yè)答案
- 2024-2025學(xué)年人教版七年級(jí)數(shù)學(xué)上冊(cè)期末達(dá)標(biāo)測(cè)試卷(含答案)
評(píng)論
0/150
提交評(píng)論