C++類的基本語法.ppt_第1頁
C++類的基本語法.ppt_第2頁
C++類的基本語法.ppt_第3頁
C++類的基本語法.ppt_第4頁
C++類的基本語法.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、類和對象,與傳統(tǒng)的面向過程的程序設(shè)計(jì)語言相比,C+語言的最大特征是支持面向?qū)ο蟪绦蛟O(shè)計(jì)OOP(Object Oriented Programming),它引入了類、繼承、多態(tài)和重載等面向?qū)ο蟮男聶C(jī)制。通過本章的學(xué)習(xí),使我們系統(tǒng)地介紹C+面向?qū)ο笤O(shè)計(jì)的基本方法。,結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn): 是一種自上而下、逐步細(xì)化的模塊化程序設(shè)計(jì)方法。 Wirth N的觀點(diǎn):算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序 是一種面向過程程序設(shè)計(jì)方法,即一個(gè)程序是由多個(gè)過程(在C+中為函數(shù))模塊組成,過程之間通過函數(shù)參數(shù)和全局變量進(jìn)行相互聯(lián)系。,3.1 面向?qū)ο蟪绦蛟O(shè)計(jì)概述,3.1.1 結(jié)構(gòu)化程序設(shè)計(jì),與非結(jié)構(gòu)化程序相比,結(jié)構(gòu)化程序在

2、調(diào)試、可讀性和可維護(hù)性等方面都有很大的改進(jìn)。 代碼重用性不高:以過程為中心設(shè)計(jì)新系統(tǒng),除了一些標(biāo)準(zhǔn)函數(shù),大部分代碼都必須重新編寫。 由于軟、硬件技術(shù)的不斷發(fā)展和用戶需求的變化,按照功能劃分設(shè)計(jì)的系統(tǒng)模塊容易發(fā)生變化,使得開發(fā)出來的模塊的可維護(hù)性欠佳。 面向過程模式將數(shù)據(jù)與過程分離,若對某一數(shù)據(jù)結(jié)構(gòu)做了修改,所有處理數(shù)據(jù)的過程都必須重新修訂,這樣就增加了很多的編程工作量。,結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn):,什么是對象: 現(xiàn)實(shí)世界是由各種各樣的事物組成,包括真實(shí)的事物和抽象的事物。例如,人、動物、汽車(真實(shí)的事物)和程序、直線(抽象的事物)等。 每一類事物都有自己特定的屬性(如大小、形狀、重量等)和行為(如

3、生長、行走、轉(zhuǎn)彎、運(yùn)算等),人們通過研究事物的屬性和行為而認(rèn)識事物。 在計(jì)算機(jī)科學(xué)中將這些現(xiàn)實(shí)世界中的事物稱之為對象。對象是包含現(xiàn)實(shí)世界中事物特征的抽象實(shí)體,它反映了系統(tǒng)為之保存信息和與之交互的方法。 在程序設(shè)計(jì)領(lǐng)域,可以用如下公式表示: 對象 = 數(shù)據(jù) + 作用于這些數(shù)據(jù)上的操作,3.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)方法及特征,為了描述屬性和行為相同的一類對象,引入了類(class)的概念。 類是具有相同數(shù)據(jù)結(jié)構(gòu)(屬性)和相同操作功能(行為)的對象的集合,它規(guī)定了這些對象的公共屬性和行為方法。 對象是類的一個(gè)實(shí)例,例如,汽車是一個(gè)類,而行駛在公路上的一輛汽車則是一個(gè)對象。 對象和類的關(guān)系相當(dāng)于程序設(shè)

4、計(jì)語言中變量和變量類型的關(guān)系。,什么是類:,OOP圍繞現(xiàn)實(shí)世界的概念來組織模塊,采用對象描述問題空間的實(shí)體,用程序代碼模擬現(xiàn)實(shí)世界中的對象,使程序設(shè)計(jì)過程更自然、更直觀。 SP是以功能為中心來描述系統(tǒng),而OOP是以數(shù)據(jù)為中心來描述系統(tǒng)。相對于功能而言,數(shù)據(jù)具有更強(qiáng)的穩(wěn)定性。 OOP模擬了對象之間的通信。就象人們之間互通信息一樣,對象之間也可以通過消息進(jìn)行通信。這樣,我們不必知道一個(gè)對象是怎樣實(shí)現(xiàn)其行為的,只需通過對象提供的接口進(jìn)行通信并使用對象所具有的行為功能。,面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn):,OOP把一個(gè)復(fù)雜的問題分解成多個(gè)能夠完成獨(dú)立功能的對象(類),然后把這些對象組合起來去完成這個(gè)復(fù)雜的問題。

5、 一個(gè)對象可由多個(gè)更小的對象組成,如汽車由發(fā)動機(jī)、傳送系統(tǒng)和排氣系統(tǒng)等組成。這些對象(類)可由不同的程序員來設(shè)計(jì),可在不同程序中使用,就象一個(gè)汽車制造商使用許多零部件去組裝一輛汽車,而這些零部件可能不是自己生產(chǎn)的。 采用面向?qū)ο竽J骄拖笤诹魉€上工作,我們最終只需將多個(gè)零部件(已設(shè)計(jì)好的對象)按照一定關(guān)系組合成一個(gè)完整的系統(tǒng)。,面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn):,class Time private: int hour;/ 數(shù)據(jù)成員,表示小時(shí) int minute;/ 數(shù)據(jù)成員,表示分鐘 int second;/ 數(shù)據(jù)成員,表示秒 public: void setTime(int h, int m, i

6、nt s) / 成員函數(shù),設(shè)置時(shí)間 hour=(h=0 ,一個(gè)簡單例子:,main() Time EndTime;/ 聲明對象EndTime / 設(shè)置對象EndTime的時(shí)間(屬性,數(shù)據(jù)成員) EndTime.setTime(12, 23, 36); coutThe time is:; / 顯示對象EndTime的時(shí)間 EndTime.showTime(); ,運(yùn)行結(jié)果: The time is:12 : 23 : 36,面向?qū)ο蟪绦蛟O(shè)計(jì)方法的基本特征,面向?qū)ο蟪绦蛟O(shè)計(jì)方法具有四個(gè)基本特征: 抽象 封裝 繼承 多態(tài)性,1. 抽象 抽象是人類認(rèn)識問題的最基本手段之一。抽象是指對具體問題(對象)進(jìn)

7、行概括,抽出一類對象的公共屬性和行為并加以描述的過程。抽象包括數(shù)據(jù)抽象和代碼抽象(或行為抽象)。,2. 封裝 封裝是把每個(gè)對象的數(shù)據(jù)(屬性)和操作(行為)包裝在一個(gè)類中。一旦定義了對象的屬性和行為,則必須決定哪些屬性和行為只用于表示內(nèi)部狀態(tài),哪些屬性和行為在外部是可見的。 一般限制直接訪問對象的屬性,而應(yīng)通過操作接口訪問,這樣使程序中模塊之間關(guān)系更簡單、數(shù)據(jù)更安全。對程序的修改也僅限于類的內(nèi)部,使得由于修改程序所帶來的影響局部化。,3. 繼承 繼承是指一個(gè)新類可以從現(xiàn)有的類派生而來。新類繼承了現(xiàn)有類的特性,包括一些屬性和行為,并且可以修改或增加新的屬性和行為,使之適合具體的需要。 例如,所有的

8、Windows應(yīng)用程序都有一個(gè)窗口,它們可以看作都是從一個(gè)窗口類派生出來的,但有的應(yīng)用程序用于文字處理,有的應(yīng)用程序用于繪圖,這是由于派生出了不同的類,它們增加了不同的屬性和行為。 繼承很好地解決了軟件的可重用性問題。,4. 多態(tài)性 多態(tài)性是指類中具有相似功能的不同函數(shù)使用同一個(gè)名稱來實(shí)現(xiàn),并允許不同類的對象對同一消息作出的響應(yīng)不相同。 例如,同樣的“編輯|粘貼”操作,在字處理程序和繪圖程序中有不同的結(jié)果;同樣的加法,把兩個(gè)時(shí)間值相加和把兩個(gè)整數(shù)相加的要求肯定不同。 多態(tài)性使程序設(shè)計(jì)靈活、抽象,具有行為共享和代碼共享的優(yōu)點(diǎn),很好地解決了程序的函數(shù)同名問題。,為了支持面向?qū)ο蟪绦蛟O(shè)計(jì),C+在C語

9、言結(jié)構(gòu)(struct)數(shù)據(jù)類型的基礎(chǔ)上引入了類這種抽象數(shù)據(jù)類型。 C+面向?qū)ο缶幊虒?shí)質(zhì)上就是面向類編程,只有定義和實(shí)現(xiàn)了類,才能聲明屬于這個(gè)類的對象,才能通過對象使用定義的成員。 傳統(tǒng)C程序員把編程重點(diǎn)放在函數(shù)的編寫上,而C+程序員把重點(diǎn)放在類的定義和實(shí)現(xiàn)上。,3.2 C+類,C+類將對象的屬性抽象為數(shù)據(jù)成員,將對象的行為抽象為成員函數(shù),并對它們進(jìn)行封裝。數(shù)據(jù)成員又稱成員變量,成員函數(shù)又稱為方法。 C+類在形式上類似于C語言中用戶自定義的結(jié)構(gòu)類型,但定義類時(shí)規(guī)定了成員的訪問控制權(quán)限。對象只能訪問所屬類的公有成員,而類的私有成員只能在類的成員函數(shù)中被訪問。 C+類定義的基本形式,3.2.1 類的

10、定義與實(shí)現(xiàn),class private: ; public: ; protected: ; ;,C+類定義的基本形式:,類的定義由關(guān)鍵字class開始,其后為用戶定義的類名,花括號括起來的部分稱為類體。 關(guān)鍵字private、public和protected稱為訪問權(quán)限控制符,用來設(shè)置數(shù)據(jù)成員和成員函數(shù)的訪問屬性,其默認(rèn)值為private。 private屬性表示數(shù)據(jù)成員和成員函數(shù)是類的私有成員,它們只允許被本類的成員函數(shù)訪問或調(diào)用,數(shù)據(jù)成員一般定義為private屬性;,說明:,public屬性表示數(shù)據(jù)成員和成員函數(shù)是類的公有成員,它們允許被本類或其它類的成員函數(shù)(通過對象)訪問或調(diào)用,是類

11、的外部接口,成員函數(shù)一般定義為public屬性; protected屬性表示數(shù)據(jù)成員和成員函數(shù)是類的保護(hù)成員,它們允許被本類的成員函數(shù)和派生類的成員函數(shù)訪問或調(diào)用。 例:,說明:,class Time private:/ 最好不要省略private int hour;/ 數(shù)據(jù)成員,表示小時(shí) int minute;/ 數(shù)據(jù)成員,表示分鐘 int second;/ 數(shù)據(jù)成員,表示秒 public: void setTime(int, int, int);/ 成員函數(shù),設(shè)置時(shí)間 void showTime();/ 成員函數(shù),輸出時(shí)間 ;,例 定義類Time(表示時(shí)間)。,私有數(shù)據(jù)成員hour、min

12、ute 和second只能在類的成員 函數(shù)中被訪問或賦值;,公有成員函數(shù)setTime、showTime 可在外部被調(diào)用,但必須通過一個(gè) 對象作為對象的成員使用。,利用C+類進(jìn)行面向?qū)ο缶幊?,定義類的成員只是完成了工作的第一步,最重要的工作是實(shí)現(xiàn)定義的類。 類的實(shí)現(xiàn)實(shí)質(zhì)上是類的成員函數(shù)的實(shí)現(xiàn),即定義類的成員函數(shù)。 成員函數(shù)的定義形式與一般函數(shù)的定義形式基本相同,但必須在成員函數(shù)名前加上類名和作用域限定符(:)。 成員函數(shù)的定義也可放在類體內(nèi)(該函數(shù)聲明之處),這時(shí)成員函數(shù)將變成內(nèi)聯(lián)函數(shù)。 例:,類的實(shí)現(xiàn):,void Time:setTime(int h, int m, int s) hour=

13、(h=0 ,例 類Time的實(shí)現(xiàn)。,private成員hour、minute和 second不允許外界存取, 所以為類Time增加兩個(gè) public成員函數(shù),供外界 設(shè)置或顯示private成員。,一般將類的定義放在頭文件(.h)中,類的實(shí)現(xiàn)放在源文件(.cpp)中,而main主函數(shù)可以放在另一個(gè)源文件中。在源文件中用#include編譯預(yù)處理指令包含頭文件。,C+面向?qū)ο缶幊碳s定之一:,對象是類的一個(gè)實(shí)例,定義并實(shí)現(xiàn)了類,就可以利用定義好的類來聲明對象,即創(chuàng)建對象。聲明對象的形式與聲明普通變量類似,例如: Time t1, start ; point *pt1=/ 聲明對象EndTime E

14、ndTime.setTime(12, 23, 36); / 設(shè)置對象EndTime的時(shí)間 coutThe time is:; EndTime.showTime(); / 顯示對象EndTime的時(shí)間 ,例 類Time的使用,聲明對象并設(shè)置對象屬性。,在定義類時(shí)不能對成員變量進(jìn)行初始化,因?yàn)闊o法確定成員變量屬于哪一個(gè)對象。 成員變量一般都定義為私有屬性,也不能在聲明對象后利用賦值運(yùn)算對成員變量進(jìn)行初始化。 成員變量的初始化一般是利用一個(gè)名為構(gòu)造函數(shù)的成員函數(shù)來完成。,3.2.2 構(gòu)造函數(shù)和析構(gòu)函數(shù),如何進(jìn)行成員 變量的初始化?,?,構(gòu)造函數(shù)是一種特殊的成員函數(shù),它是在創(chuàng)建對象時(shí)(聲明或new動態(tài)

15、創(chuàng)建)系統(tǒng)自動調(diào)用的成員函數(shù)。,什么是構(gòu)造函數(shù):,析構(gòu)函數(shù)也是一種特殊的成員函數(shù),它是在對象生存期結(jié)束時(shí)系統(tǒng)自動調(diào)用的成員函數(shù)。,什么是析構(gòu)函數(shù):,構(gòu)造函數(shù)的名稱與類名相同,析構(gòu)函數(shù)的名稱必須在類名前加上“”符號。注意,構(gòu)造函數(shù)和析構(gòu)函數(shù)不能指定任何返回值類型,包括void返回類型。,#include class Time private: int hour; int minute; int second; public: Time(int, int, int);/ 構(gòu)造函數(shù) Time();/ 析構(gòu)函數(shù) . . . . . . ;,例 為類Time添加構(gòu)造函數(shù)和析構(gòu)函數(shù)。,Time:Time(

16、int h, int m, int s) hour=h;/ 對私有成員變量初始化 minute=m; second=s; coutThe constructor be called: hour: minute:secondendl; ,構(gòu)造函數(shù)和析構(gòu)函數(shù)的實(shí)現(xiàn):,功能與成員函數(shù) Time:setTime()類似,Time:Time() coutThe destructor be called: hour: minute:secondendl; ,void main(void) Time t1(10, 35, 55) ; / 自動調(diào)用構(gòu)造函數(shù) Time t2(16, 53, 9) ; / 自動調(diào)

17、用構(gòu)造函數(shù) / 退出main()主函數(shù)時(shí)自動調(diào)用析構(gòu)函數(shù),構(gòu)造函數(shù)和析構(gòu)函數(shù)的自動調(diào)用:,程序運(yùn)行結(jié)果為: The constructor be called:10:35:55 The constructor be called:16:53:9 The destructor be called:16:53:9 The destructor be called:10:35:55,為什么是 這個(gè)結(jié)果?,?,當(dāng)創(chuàng)建一個(gè)對象時(shí),系統(tǒng)先根據(jù)類定義的成員變量為對象分配內(nèi)存空間,然后自動調(diào)用對象的構(gòu)造函數(shù)對這段內(nèi)存空間進(jìn)行初始化處理,從而完成對象的初始化。 當(dāng)撤消一個(gè)對象時(shí),系統(tǒng)先自動調(diào)用對象的析構(gòu)函數(shù),然

18、后釋放對象所占內(nèi)存空間。 從程序的運(yùn)行結(jié)果可以看出,析構(gòu)函數(shù)的調(diào)用順序一般與構(gòu)造函數(shù)的調(diào)用順序相反。 棧:后進(jìn)先出表,結(jié)果分析:,與一般數(shù)據(jù)類型的變量相比,對象在它的生存期會有大量的操作,有時(shí)這些操作的結(jié)果必須在對象的生存期結(jié)束時(shí)加以清理。因此可以在析構(gòu)函數(shù)中進(jìn)行動態(tài)分配的內(nèi)存清理工作。 如果定義類時(shí)沒有提供構(gòu)造函數(shù)和析構(gòu)函數(shù),編譯系統(tǒng)將會自動為類分別添加一個(gè)缺省的構(gòu)造函數(shù)和析構(gòu)函數(shù)。如果用戶加上自定義的構(gòu)造函數(shù)和析構(gòu)函數(shù),編譯系統(tǒng)將不會再添加缺省的構(gòu)造函數(shù)和析構(gòu)函數(shù)。 若構(gòu)造函數(shù)無參數(shù),則聲明對象時(shí)也不能給出參數(shù)。,補(bǔ)充說明:,3.2.3 this指針,this指針是一個(gè)特殊的隱藏在對象中的指針,每一個(gè)處于生存期的對象都有一個(gè)this指針,用于指向?qū)ο蟊旧怼?當(dāng)類的某個(gè)非靜態(tài)成員函數(shù)被調(diào)用時(shí),系統(tǒng)通過this指針確定是哪一個(gè)對象的該成員函數(shù)被調(diào)用。實(shí)際上,this指針總是作為一個(gè)隱含參數(shù)傳遞給類的每一個(gè)成員函數(shù)。

溫馨提示

  • 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

提交評論