




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第8章 面向?qū)ο蠹夹g(shù)根底 歡迎開啟面向?qū)ο笤O(shè)計(jì)的大門,在第1章中曾經(jīng)簡要引見過面向?qū)ο笤O(shè)計(jì)的根本理念,本章將詳細(xì)講述類和對象的概念。在前面的章節(jié)中,程序是由一個個函數(shù)組成的,是構(gòu)造化的編程方法。從本章開場,編寫的程序是由對象組成的,將要學(xué)慣用C+言語進(jìn)展面向?qū)ο蟮某绦蛟O(shè)計(jì),當(dāng)然,面向?qū)ο笤O(shè)計(jì)也離不開函數(shù)等前面講述的根底知識。8.1 面向?qū)ο蟾靖拍睢皩ο髈bject是個籠統(tǒng)的概念,現(xiàn)實(shí)世界中的任何事物都可以看成是對象,動物、植物、摩托車、汽車等等都是對象,對象之間有很大的差別,如人和汽車,但有的對象間有類似之處,比如摩托車和自行車,它們有共同的特征有輪子,同樣的功能人的交通工具,也有不同的特征
2、,如“輪子個數(shù),“車子分量等等,基于此,可將“有輪子,“可改換輪胎、“能作為人的交通工具籠統(tǒng)成一個類別class,可稱之為“車類,摩托車和自行車是該類別的對象。類的提取往往是從兩個方面來思索的,一是特征C+常稱為“屬性、另一個是功能C+中常稱為“行為,具備類中定義的“屬性和“行為的對象都是該類的對象,因此,我們可以說,電動車也是“車類的對象。8.1.1 類的概念類和對象的關(guān)系與 “構(gòu)造和“構(gòu)造體變量的關(guān)系類似。C+用類來描畫對象,類是對現(xiàn)實(shí)世界中類似事物的籠統(tǒng),同是“雙輪車的摩托車和自行車,有共同點(diǎn),也有許多不同點(diǎn)?!败囶愂菍δν熊?、自行車、汽車等一樣點(diǎn)和不同點(diǎn)的提取與籠統(tǒng),如所示。類的定義分
3、為兩個部分:數(shù)據(jù)相當(dāng)于屬性和對數(shù)據(jù)的操作相當(dāng)于行為。從程序設(shè)計(jì)的觀念來說,類就是數(shù)據(jù)類型,是用戶定義的數(shù)據(jù)類型,對象可以看成某個類的實(shí)例某個類的變量,類和對象的關(guān)系與前面引見的“構(gòu)造和“構(gòu)造體變量的關(guān)系類似,但又有不同,在本章稍后類的定義一節(jié)中后詳細(xì)闡明這一問題。8.1.2 類是分層的每一大類中可分成假設(shè)干小類,也就是說,類是分層的,如圖8.2所示。可將一切的圖形籠統(tǒng)成“圖形類,該類中共同的屬性有很多,這里只取“顏色這個屬性,對一切圖形而言,都可定義“顯示操作。同時,“圖形類可進(jìn)一步分為“一維圖形類、“二維圖形類和其他類,根據(jù)外形的不同,“一維圖形類可進(jìn)一步分為“直線類和“折線類,“二維圖形類
4、又可分為“正方形類和“圓類。下層的類除了“承繼了上層類中定義的屬性和行為外,還可添加新的屬性和行為如“圓類相比“二維圖形類添加了“圓心和“半徑屬性,添加了“求面積這一行為,甚至可以在下層類中重新定義上層類已定義的屬性和行為如“直線類、“折線類、“正方形類和“圓類中都重新定義了“圖形類中已定義的“顯示操作。8.1.3 類和對象的關(guān)系對象需求從屬性和行為兩個方面進(jìn)展描畫,類是對象的封裝。類的運(yùn)用主要有以下幾個步驟:定義一個類,C+中,分別用數(shù)據(jù)成員和函數(shù)成員來表現(xiàn)對象的屬性和行為。類的定義強(qiáng)調(diào)“信息隱藏,將實(shí)現(xiàn)細(xì)節(jié)和不允許外部隨意訪問的部分屏蔽起來。因此,在類定義中,需求用public或priva
5、te將類成員區(qū)分開此外,還有protected型的數(shù)據(jù)成員,稍后會有詳細(xì)引見,外界不能訪問程序的private成員,只能訪問public數(shù)據(jù)成員,對象間的信息傳送也只能經(jīng)過public成員函數(shù),保證了對象的數(shù)據(jù)平安。類的實(shí)現(xiàn),即進(jìn)一步定義類的成員函數(shù),使各個成員函數(shù)相互配合以實(shí)現(xiàn)接口對外提供的功能,類的定義和實(shí)現(xiàn)是由類設(shè)計(jì)者完成的。經(jīng)過該類聲明一個屬于該類的變量即對象,并調(diào)用其接口即public型的數(shù)據(jù)成員或函數(shù)成員,這是運(yùn)用者的任務(wù)。8.2 C+類的定義 先來看一下類是如何定義的,對一些通用的問題,前人曾經(jīng)定義好了很多的類,比如微軟的MFC類庫,程序員不用關(guān)懷其內(nèi)部細(xì)節(jié),只需抱著“拿來主義的
6、態(tài)度就好,但對某些特殊問題來說,必需由本人提煉模型,進(jìn)展類的定義。8.2.1 類定義的根本方式 C+中運(yùn)用關(guān)鍵字class定義一個類,其根本方式如下: class類名 public: 公共成員函數(shù)private: 私有成員函數(shù) 私有的數(shù)據(jù)成員定義;8.2.2 類定義例如 對一臺計(jì)算機(jī)來說,它有如下特征: 屬性:品牌、價錢。 方法:輸出計(jì)算機(jī)的屬性。 實(shí)現(xiàn)了computer類的定義:8.2.3 class和struct class的定義看上去很像struct定義的擴(kuò)展,現(xiàn)實(shí)上,類定義時的關(guān)鍵字class完全可以交換成struct,也就是說,第5章中引見的構(gòu)造體變量也可以有成員函數(shù)。class和s
7、truct的獨(dú)一區(qū)別在于:struct的默許訪問方式是public,而class為private。 提示:通常運(yùn)用class來定義類,而把struct用于只表示數(shù)據(jù)對象、沒有成員函數(shù)的類。8.3 C+類的實(shí)現(xiàn) 類的實(shí)現(xiàn)就是定義其成員函數(shù)的過程,類的實(shí)現(xiàn)有兩種方式:一是在類定義時同時完成成員函數(shù)的定義。另一是在類定義的外部定義其成員函數(shù)。8.3.1 在類定義時定義成員函數(shù) 成員函數(shù)的實(shí)現(xiàn)可以在類定義時同時完成,如: 詳細(xì)內(nèi)容請參照本書8.3.2 在類定義的外部定義成員函數(shù)在類定義的外部定義成員函數(shù)時,應(yīng)運(yùn)用作用域操作符:來標(biāo)識函數(shù)所屬的類,即有如下方式:前往類型 類名:成員函數(shù)名(參數(shù)列表)函數(shù)
8、體其中,前往類型、成員函數(shù)名和參數(shù)列表必需于類定義時的函數(shù)原型一致,這樣,可改寫為:8.4 C+類的運(yùn)用 定義了一個類之后,便可以好像用int、double等類型符聲明簡單變量一樣,創(chuàng)建該類的對象,稱為類的實(shí)例化。由此看來,類的定義實(shí)踐上是定義了一種類型,類不接納或存儲詳細(xì)的值,只作為生成詳細(xì)對象的“藍(lán)圖,只需將類實(shí)例化,創(chuàng)建對象聲明類的變量后,系統(tǒng)才為對象分配存儲空間。8.4.1 聲明一個對象 運(yùn)用類定義聲明了一個對象,并利用對象名實(shí)現(xiàn)了public成員函數(shù)的調(diào)用:8.4.2 對象的作用域、可見域和生存期 對象的作用域、可見域和生存期與普通變量,如int型變量的作用域、可見域和生存期并無不同
9、,對象同樣有部分、全局和類內(nèi)稍后就將對對象成員進(jìn)展引見之分,對于在代碼塊中聲明的部分對象,在代碼塊執(zhí)行終了退出時,對象會被自動撤銷,對應(yīng)的內(nèi)存會自動釋放當(dāng)然,假設(shè)對象的成員函數(shù)中運(yùn)用了new或malloc懇求了動態(tài)內(nèi)存,卻沒有運(yùn)用delete或free命令釋放,對象撤銷時,這部分動態(tài)內(nèi)存不會自動釋放,呵斥內(nèi)存泄露。8.5. 對象的創(chuàng)建和撤銷 中,經(jīng)過自定義的公共成員函數(shù)SetBrand是SetPrice實(shí)現(xiàn)對對象數(shù)據(jù)成員的初始化,實(shí)踐上,C+為類提供了兩種特殊的成員函數(shù),一是構(gòu)造函數(shù),在對象創(chuàng)建時自動調(diào)用,用以完成對象成員變量等的初始化及其他操作如為指針成員動態(tài)懇求內(nèi)存空間等;另一個是析構(gòu)函數(shù)
10、,在對象撤銷時自動調(diào)用,用以執(zhí)行一些清理義務(wù),如釋放成員函數(shù)中動態(tài)懇求的內(nèi)存等。8.5.1 構(gòu)造函數(shù)的作用 當(dāng)對象被創(chuàng)建時,構(gòu)造函數(shù)自動被調(diào)用。構(gòu)造函數(shù)有一些獨(dú)特的地方:函數(shù)的名字與類名一樣,沒有前往類型和前往值。其主要任務(wù)有: 給對象一個標(biāo)識符。 為對象數(shù)據(jù)成員開辟內(nèi)存空間。 完成對象數(shù)據(jù)成員的初始化函數(shù)體內(nèi)的任務(wù),由程序員完成。 上述3點(diǎn)也闡明了構(gòu)造函數(shù)的執(zhí)行順序,在執(zhí)行函數(shù)體之前,構(gòu)造函數(shù)曾經(jīng)為對象的數(shù)據(jù)成員開辟了內(nèi)存空間,這時,在函數(shù)體內(nèi)對數(shù)據(jù)成員的初始化便是順理成章了。8.5.2 構(gòu)造函數(shù)可以有參數(shù)編譯器自動生成的缺省構(gòu)造函數(shù)是無參的,實(shí)踐上,構(gòu)造函數(shù)可以接納參數(shù),在對象創(chuàng)建時提供更
11、大的自在度,如代碼8-5:8.5.3 構(gòu)造函數(shù)支持重載 前面說,一旦程序員為一個類定義了構(gòu)造函數(shù),編譯器便不會為類自動生成缺省構(gòu)造函數(shù),因此,假設(shè)還想運(yùn)用無參的構(gòu)造函數(shù),如“point pt1;的方式必需在類定義中顯式定義一個無參構(gòu)造函數(shù)。這樣,構(gòu)造函數(shù)就會出現(xiàn)兩個,會不會有問題呢?不會,構(gòu)造函數(shù)支持重載,在創(chuàng)建對象時,根據(jù)傳送的詳細(xì)參數(shù)決議采用哪個構(gòu)造函數(shù)。8.5.4 構(gòu)造函數(shù)允許按參數(shù)缺省方式調(diào)用中的構(gòu)造函數(shù)可以作如下定義:point(int x0,int y0)cout對象創(chuàng)建時構(gòu)造函數(shù)被自動調(diào)用endl;xPos=x;yPos=y;此時,允許在創(chuàng)建對象時缺省參數(shù),以下聲明語句都是合法的
12、:point pt;point pt(3);point pt(3,4);8.5.5 初始化表達(dá)式除了在構(gòu)造函數(shù)體內(nèi)初始化數(shù)據(jù)成員外,還可以經(jīng)過成員初始化表達(dá)式來完成。成員初始化表可用于初始化類的恣意數(shù)據(jù)成員后面要引見的static數(shù)據(jù)成員除外,該表達(dá)式由逗號分隔的數(shù)據(jù)成員表組成,初值放在一對圓括號中。只需將成員初始化表達(dá)式放在構(gòu)造函數(shù)的頭和體之間,并用冒號將其與構(gòu)造函數(shù)的頭分隔開,便可實(shí)現(xiàn)數(shù)據(jù)成員表中元素的初始化,對而言,下述代碼:point(int x,int y)cout有參構(gòu)造函數(shù)的調(diào)用endl;xPos=x;yPos=y;等價于:point(int x,int y):xPos(x),y
13、Pos(y)cout有參構(gòu)造函數(shù)的調(diào)用數(shù)據(jù)成員的方式來存取類數(shù)據(jù)成員。舉例來說:class Exprivate:int x;int y;public:void Set()x=1;y=2;8.9.5 對象數(shù)組對象數(shù)組和規(guī)范類型數(shù)組的運(yùn)用方法并沒有什么不同,也有聲明、初始化和運(yùn)用3個步驟。8.9.6 對象鏈表 對象鏈表中,節(jié)點(diǎn)的初始化需求構(gòu)造函數(shù)來完成,除此之外,對象鏈表和第5章中引見的鏈表并無不同。8.10 為對象動態(tài)分配內(nèi)存 和把一個簡單變量創(chuàng)建在動態(tài)存儲區(qū)一樣,可以用new和delete為對象分配動態(tài)存儲區(qū),在復(fù)制構(gòu)造函數(shù)一節(jié)中曾經(jīng)引見了為類內(nèi)的指針成員分配動態(tài)內(nèi)存的相關(guān)范例,本節(jié)主要討論如
14、何為對象和對象數(shù)組動態(tài)分配內(nèi)存。8.10.1 運(yùn)用new和delete為單個對象分配/釋放動態(tài)內(nèi)存演示了如何為單個對象動態(tài)內(nèi)存分配。8.10.2 運(yùn)用new和delete為對象數(shù)組分配/釋放動態(tài)空間 運(yùn)用new為對象數(shù)組分配動態(tài)空間時,不能顯式調(diào)用對象的構(gòu)造函數(shù),因此,對象要么沒有定義任何方式的構(gòu)造函數(shù)由編譯器缺省提供,要么顯式定義了一個且只能由一個一切參數(shù)都有缺省值的構(gòu)造函數(shù)。8.10.3 malloc和free能否為對象動態(tài)懇求內(nèi)存 malloc/free無法滿足動態(tài)對象的要求,由于malloc和free無法像new/delete及new/delete那樣自動調(diào)用對象的構(gòu)造函數(shù)和析構(gòu)函數(shù)。8.11 小結(jié)本章講述了C+言語中面向?qū)ο缶幊痰母靖拍詈头椒ā+經(jīng)過class關(guān)鍵字可以定義類,類的成員包括數(shù)據(jù)成員和函數(shù)成員兩種。關(guān)于類的運(yùn)用,大體分為類的定義、類的實(shí)現(xiàn)和類對象的創(chuàng)建3個步驟,其中,類的定義指明了類的構(gòu)造,相當(dāng)于“藍(lán)圖,而類的實(shí)現(xiàn)相當(dāng)于“技術(shù)圖紙,根據(jù)定義和實(shí)現(xiàn)便可以聲明一個類的對象。類中有幾個特殊的成員函數(shù),構(gòu)造函數(shù)、復(fù)
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)工作計(jì)劃年度安排
- 文化活動保安工作的實(shí)施方案計(jì)劃
- 如何制定全面發(fā)展戰(zhàn)略計(jì)劃
- 數(shù)碼沖印合同范本
- 轉(zhuǎn)讓鋪面 合同范本
- 寵物藥店合同范本
- 科技類學(xué)術(shù)活動的策劃與執(zhí)行流程
- 第10課《往事依依》原文+注解+教學(xué)設(shè)計(jì) +學(xué)案+同步練習(xí)2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 腹瀉患兒的護(hù)理動畫
- 廣東工商職業(yè)技術(shù)大學(xué)《體育二》2023-2024學(xué)年第二學(xué)期期末試卷
- 1、1~36號元素電子排布式、排布圖
- advantrol-pro v2.70學(xué)習(xí)版系統(tǒng)組態(tài)使用手冊
- 職業(yè)院校技能大賽沙盤模擬企業(yè)經(jīng)營賽項(xiàng)規(guī)程
- 國網(wǎng)新聞宣傳與企業(yè)文化管理專責(zé)題庫匯總-下(判斷、簡答題)
- 職業(yè)衛(wèi)生調(diào)查表
- GB/T 11982.1-2005聚氯乙烯卷材地板第1部分:帶基材的聚氯乙烯卷材地板
- GB/T 10046-2018銀釬料
- GB 4094-2016汽車操縱件、指示器及信號裝置的標(biāo)志
- 第一講 文化概論
- 小兒急性喉炎-課件
- 醫(yī)院難免壓瘡申報表
評論
0/150
提交評論