




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第2章章 類和對(duì)象類和對(duì)象2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義2.3 類的成員函數(shù)類的成員函數(shù)2.4 對(duì)象成員的引用對(duì)象成員的引用2.5 類和對(duì)象的簡(jiǎn)單應(yīng)用類和對(duì)象的簡(jiǎn)單應(yīng)用2.6 類的封閉性和信息隱蔽類的封閉性和信息隱蔽22.1.1 什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)2.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的特面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)點(diǎn)2.1.3 類和對(duì)象作用類和對(duì)象作用2.1.4 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖_發(fā)2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述3銀行系統(tǒng)允許顧客開設(shè)不同類型的銀行賬戶,銀行系
2、統(tǒng)允許顧客開設(shè)不同類型的銀行賬戶,包括現(xiàn)金賬戶、支票賬戶和貸款賬戶,同時(shí)包括現(xiàn)金賬戶、支票賬戶和貸款賬戶,同時(shí)允許顧客存款、取款和轉(zhuǎn)賬。允許顧客存款、取款和轉(zhuǎn)賬。首先考慮數(shù)據(jù)結(jié)構(gòu)首先考慮數(shù)據(jù)結(jié)構(gòu) struct accout char *owner; /賬戶賬戶 unsigned long account_number; /賬號(hào)賬號(hào) float balance; /余額余額 float interestYTD; /年利息年利息 char account_type; /賬戶類型賬戶類型(現(xiàn)金現(xiàn)金x,支票支票z,貸款貸款d) ;面向過(guò)程程序設(shè)計(jì)面向過(guò)程程序設(shè)計(jì)4 再考慮三個(gè)過(guò)程分別負(fù)責(zé)存款、取款和轉(zhuǎn)
3、再考慮三個(gè)過(guò)程分別負(fù)責(zé)存款、取款和轉(zhuǎn)賬,可以設(shè)計(jì)三個(gè)函數(shù):賬,可以設(shè)計(jì)三個(gè)函數(shù): MakeDeposit() WithDraw() Transfer() 這種數(shù)據(jù)結(jié)構(gòu)與過(guò)程分離有很多問(wèn)題,例這種數(shù)據(jù)結(jié)構(gòu)與過(guò)程分離有很多問(wèn)題,例如增加一種賬戶類型如增加一種賬戶類型退休賬戶退休賬戶(t),則三個(gè)函數(shù)都必須重新編寫。則三個(gè)函數(shù)都必須重新編寫。面向過(guò)程程序設(shè)計(jì)面向過(guò)程程序設(shè)計(jì)5class BankAccount public: void MakeDeposit(float amount); float WithDraw(float amount); bool Transfer(BankAccount
4、&to,float amount); private: char *owner; /賬戶賬戶 long account_number; /賬號(hào)賬號(hào) float balance; /余額余額 float interestYTD; /年利息年利息 char account_type; /賬戶類型賬戶類型;2.1.1 什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)6 客觀世界中任何一個(gè)事物都可以看成一客觀世界中任何一個(gè)事物都可以看成一個(gè)對(duì)象。對(duì)象可以是自然物體,也可以個(gè)對(duì)象。對(duì)象可以是自然物體,也可以是社會(huì)中的一種組織結(jié)構(gòu)是社會(huì)中的一種組織結(jié)構(gòu)(班級(jí)、系、學(xué)班級(jí)、系、學(xué)校校),甚至是一個(gè)圖
5、形、一項(xiàng)計(jì)劃等。,甚至是一個(gè)圖形、一項(xiàng)計(jì)劃等。 對(duì)象是構(gòu)成系統(tǒng)的基本單位。任何一個(gè)對(duì)象是構(gòu)成系統(tǒng)的基本單位。任何一個(gè)對(duì)象都具有對(duì)象都具有靜態(tài)和動(dòng)態(tài)靜態(tài)和動(dòng)態(tài)的特征。靜態(tài)特的特征。靜態(tài)特征稱為征稱為屬性屬性,動(dòng)態(tài)特征稱為,動(dòng)態(tài)特征稱為行為行為,外界,外界給對(duì)象發(fā)出的信息一般稱作給對(duì)象發(fā)出的信息一般稱作消息消息。1.對(duì)象對(duì)象71.封裝封裝2.抽象抽象3.繼承繼承4.多態(tài)多態(tài)面向?qū)ο笈c面向過(guò)程的不同面向?qū)ο笈c面向過(guò)程的不同8 早期的軟件由于數(shù)據(jù)和程序混在一起,導(dǎo)早期的軟件由于數(shù)據(jù)和程序混在一起,導(dǎo)致程序可讀性很差,修改也困難。許多數(shù)致程序可讀性很差,修改也困難。許多數(shù)據(jù)都混在一起,而這些數(shù)據(jù)又被多個(gè)
6、模塊據(jù)都混在一起,而這些數(shù)據(jù)又被多個(gè)模塊相互調(diào)用,某個(gè)模塊在改動(dòng)某個(gè)數(shù)據(jù)時(shí)常相互調(diào)用,某個(gè)模塊在改動(dòng)某個(gè)數(shù)據(jù)時(shí)常會(huì)對(duì)整個(gè)程序產(chǎn)生無(wú)法預(yù)料的錯(cuò)誤。會(huì)對(duì)整個(gè)程序產(chǎn)生無(wú)法預(yù)料的錯(cuò)誤。 面向面向?qū)ο筇岢隽藬?shù)據(jù)封裝,它將每個(gè)數(shù)據(jù)對(duì)象提出了數(shù)據(jù)封裝,它將每個(gè)數(shù)據(jù)都封裝在各自的類中,又設(shè)置了多種訪問(wèn)都封裝在各自的類中,又設(shè)置了多種訪問(wèn)權(quán)限,權(quán)限, 把它的一部分屬性和功能向外界把它的一部分屬性和功能向外界屏蔽,屏蔽,從而避免了非法操作和出錯(cuò)的可能。從而避免了非法操作和出錯(cuò)的可能。2.封裝與信息隱蔽封裝與信息隱蔽 9 在設(shè)計(jì)一個(gè)對(duì)象時(shí),要周密地考慮如何在設(shè)計(jì)一個(gè)對(duì)象時(shí),要周密地考慮如何進(jìn)行封裝,把不必讓外界知道
7、的部分隱進(jìn)行封裝,把不必讓外界知道的部分隱蔽起來(lái)。也就是說(shuō),把對(duì)象的內(nèi)部實(shí)現(xiàn)蔽起來(lái)。也就是說(shuō),把對(duì)象的內(nèi)部實(shí)現(xiàn)和外部行為分隔開來(lái)。和外部行為分隔開來(lái)。 封裝性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要封裝性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特點(diǎn),封裝有兩個(gè)含義:特點(diǎn),封裝有兩個(gè)含義:2.封裝與信息隱蔽封裝與信息隱蔽 10 把有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)把有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成程序中的一個(gè)基本單位,各象中,形成程序中的一個(gè)基本單位,各個(gè)對(duì)象之間相互獨(dú)立,互不干擾。個(gè)對(duì)象之間相互獨(dú)立,互不干擾。 把對(duì)象中的某些部分對(duì)外隱蔽,把對(duì)象中的某些部分對(duì)外隱蔽,即隱蔽即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以
8、便與其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對(duì)外外界聯(lián)系,接收外界的消息。這種對(duì)外界隱蔽的做法稱為界隱蔽的做法稱為信息隱蔽信息隱蔽。2.封裝與信息隱蔽封裝與信息隱蔽 11 面向面向?qū)ο笏枷胍髮⒊绦虻拿恳徊糠侄伎磳?duì)象思想要求將程序的每一部分都看做一個(gè)抽象的對(duì)象,做一個(gè)抽象的對(duì)象,可以將同類對(duì)象的共可以將同類對(duì)象的共同特征抽象出來(lái),同特征抽象出來(lái),從而形成從而形成一個(gè)一個(gè)類類。 抽象的作用是表示同一類事物的本質(zhì)。抽象的作用是表示同一類事物的本質(zhì)。 C和和C+中的數(shù)據(jù)類型就是對(duì)一批具體的中的數(shù)據(jù)類型就是對(duì)一批具體的數(shù)的抽象。數(shù)的抽象。 類是對(duì)象的抽象,而對(duì)象是類的特例類是對(duì)
9、象的抽象,而對(duì)象是類的特例(類類的具體表現(xiàn)形式的具體表現(xiàn)形式)。3.抽象抽象124.繼承與重用繼承與重用 如果已經(jīng)建立名為如果已經(jīng)建立名為A的類,現(xiàn)要建立一個(gè)的類,現(xiàn)要建立一個(gè)名為名為B的類,而的類,而B類與類與A類的內(nèi)容基本相類的內(nèi)容基本相同,只是在同,只是在A類基礎(chǔ)上增加了一些屬性和類基礎(chǔ)上增加了一些屬性和行為,這樣只需在行為,這樣只需在A類的基礎(chǔ)上添加新內(nèi)類的基礎(chǔ)上添加新內(nèi)容即可,這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的容即可,這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承繼承機(jī)制。機(jī)制。 采用繼承的方法可以利用一個(gè)已有的類采用繼承的方法可以利用一個(gè)已有的類建立一個(gè)新的類,可以重用已有軟件的建立一個(gè)新的類,可以重用已
10、有軟件的一部分,這就是一部分,這就是軟件重用軟件重用。13 有幾個(gè)相似而不完全相同的對(duì)象,在向有幾個(gè)相似而不完全相同的對(duì)象,在向它們發(fā)出同一個(gè)消息是,它們分別執(zhí)行它們發(fā)出同一個(gè)消息是,它們分別執(zhí)行不同的操作,這種現(xiàn)象稱為不同的操作,這種現(xiàn)象稱為多態(tài)現(xiàn)象多態(tài)現(xiàn)象。 在在C+中所謂中所謂多態(tài)性多態(tài)性指:由繼承而產(chǎn)生指:由繼承而產(chǎn)生的相關(guān)的不同的新類,它的對(duì)象對(duì)同一的相關(guān)的不同的新類,它的對(duì)象對(duì)同一個(gè)消息會(huì)作出不同的響應(yīng)。個(gè)消息會(huì)作出不同的響應(yīng)。5.多態(tài)性多態(tài)性 14 傳統(tǒng)的面向過(guò)程程序設(shè)計(jì)是圍繞功能進(jìn)傳統(tǒng)的面向過(guò)程程序設(shè)計(jì)是圍繞功能進(jìn)行的,用一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能,一個(gè)行的,用一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能,
11、一個(gè)函數(shù)可以使用任何一組數(shù)據(jù),一組數(shù)據(jù)函數(shù)可以使用任何一組數(shù)據(jù),一組數(shù)據(jù)可以被多個(gè)函數(shù)使用。當(dāng)程序規(guī)模越來(lái)可以被多個(gè)函數(shù)使用。當(dāng)程序規(guī)模越來(lái)越大,數(shù)據(jù)越來(lái)越多,操作越來(lái)越復(fù)雜,越大,數(shù)據(jù)越來(lái)越多,操作越來(lái)越復(fù)雜,這種方法容易出現(xiàn)錯(cuò)誤,程序員往往感這種方法容易出現(xiàn)錯(cuò)誤,程序員往往感到難以應(yīng)付。到難以應(yīng)付。2.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)15面向?qū)ο蟪绦蛟O(shè)計(jì)包括兩個(gè)方面:面向?qū)ο蟪绦蛟O(shè)計(jì)包括兩個(gè)方面:設(shè)計(jì)所需的各種類,即決定把哪些數(shù)據(jù)和操作設(shè)計(jì)所需的各種類,即決定把哪些數(shù)據(jù)和操作封裝在一起。封裝在一起??紤]怎樣向?qū)ο蟀l(fā)送消息考慮怎樣向?qū)ο蟀l(fā)送消息(調(diào)用對(duì)象的成員函調(diào)用對(duì)象的
12、成員函數(shù)數(shù)),實(shí)現(xiàn)所需的操作。這時(shí)設(shè)計(jì)程序象一個(gè),實(shí)現(xiàn)所需的操作。這時(shí)設(shè)計(jì)程序象一個(gè)總調(diào)度,不斷地向各個(gè)對(duì)象發(fā)送消息總調(diào)度,不斷地向各個(gè)對(duì)象發(fā)送消息(命令命令),讓這些對(duì)象活動(dòng)起來(lái)讓這些對(duì)象活動(dòng)起來(lái)(激活這些對(duì)象激活這些對(duì)象),完成各,完成各自的職責(zé)范圍工作,各個(gè)對(duì)象的操作完成,整自的職責(zé)范圍工作,各個(gè)對(duì)象的操作完成,整體任務(wù)也就完成了。體任務(wù)也就完成了。2.1.2 面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)16類是類是C+中十分重要的概念,它是實(shí)現(xiàn)中十分重要的概念,它是實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。C+對(duì)對(duì)C改進(jìn),改進(jìn),其中最重要的就是增加了類這樣一種類型。其中最重要
13、的就是增加了類這樣一種類型。類是所有面向?qū)ο蟮恼Z(yǔ)言的共同特征,所類是所有面向?qū)ο蟮恼Z(yǔ)言的共同特征,所有面向?qū)ο蟮恼Z(yǔ)言都提供了這種類型。一有面向?qū)ο蟮恼Z(yǔ)言都提供了這種類型。一個(gè)有一定規(guī)模的個(gè)有一定規(guī)模的C+程序是由許多類構(gòu)程序是由許多類構(gòu)成的。可以說(shuō)類是成的??梢哉f(shuō)類是C+的靈魂。的靈魂。2.1.3 類和對(duì)象的作用類和對(duì)象的作用 17在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,用下在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,用下面的公式描述程序:面的公式描述程序: 程序程序=數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法算法算法和數(shù)據(jù)結(jié)構(gòu)兩者是相互獨(dú)立的,是算法和數(shù)據(jù)結(jié)構(gòu)兩者是相互獨(dú)立的,是分開設(shè)計(jì)的。分開設(shè)計(jì)的。面向過(guò)程的程序設(shè)計(jì)是以數(shù)據(jù)結(jié)構(gòu)為
14、基面向過(guò)程的程序設(shè)計(jì)是以數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的算法設(shè)計(jì)礎(chǔ)的算法設(shè)計(jì)。2.1.3 類和對(duì)象的作用類和對(duì)象的作用 18基于對(duì)象和面向?qū)ο蟪绦蛟O(shè)計(jì)把一個(gè)算法基于對(duì)象和面向?qū)ο蟪绦蛟O(shè)計(jì)把一個(gè)算法和一組數(shù)據(jù)結(jié)構(gòu)封裝在一個(gè)對(duì)象:和一組數(shù)據(jù)結(jié)構(gòu)封裝在一個(gè)對(duì)象: 對(duì)象對(duì)象=數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法算法程序程序=(對(duì)象對(duì)象+對(duì)象對(duì)象+對(duì)象對(duì)象)+消息消息消息的作用就是對(duì)對(duì)象進(jìn)行控制。程序設(shè)消息的作用就是對(duì)對(duì)象進(jìn)行控制。程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每個(gè)對(duì)象,以及確定向計(jì)的關(guān)鍵是設(shè)計(jì)好每個(gè)對(duì)象,以及確定向這些對(duì)象發(fā)出的命令,讓各個(gè)對(duì)象完成相這些對(duì)象發(fā)出的命令,讓各個(gè)對(duì)象完成相應(yīng)的任務(wù)。應(yīng)的任務(wù)。2.1.3 類和對(duì)象的作用類和對(duì)象
15、的作用 192.1.4 面向?qū)ο蟮能浖_發(fā)面向?qū)ο蟮能浖_發(fā)1. 面向?qū)ο蠓治雒嫦驅(qū)ο蠓治?. 面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)3. 面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?. 面向?qū)ο鬁y(cè)試面向?qū)ο鬁y(cè)試5. 面向?qū)ο缶S護(hù)面向?qū)ο缶S護(hù)20面向?qū)ο蠓治?,要按照面向?qū)ο蟮母拍蠲嫦驅(qū)ο蠓治觯凑彰嫦驅(qū)ο蟮母拍詈头椒?,在?duì)任務(wù)的分析中,從客觀事和方法,在對(duì)任務(wù)的分析中,從客觀事物和事物之間的關(guān)系歸納出有關(guān)對(duì)象物和事物之間的關(guān)系歸納出有關(guān)對(duì)象(對(duì)象的屬性和行為)以及對(duì)象之間的(對(duì)象的屬性和行為)以及對(duì)象之間的聯(lián)系。并將具有相同屬性和行為的對(duì)象聯(lián)系。并將具有相同屬性和行為的對(duì)象用一個(gè)類來(lái)表示。用一個(gè)類來(lái)表示。1.面向?qū)ο蠓治雒?/p>
16、向?qū)ο蠓治?1根據(jù)面向?qū)ο蠓治鲭A段形成的需求模型,根據(jù)面向?qū)ο蠓治鲭A段形成的需求模型,對(duì)每一部分分別進(jìn)行具體的設(shè)計(jì),首先是對(duì)每一部分分別進(jìn)行具體的設(shè)計(jì),首先是進(jìn)行類的設(shè)計(jì),類的設(shè)計(jì)可能包含多個(gè)層進(jìn)行類的設(shè)計(jì),類的設(shè)計(jì)可能包含多個(gè)層次(利用繼承和派生機(jī)制)。然后以這些次(利用繼承和派生機(jī)制)。然后以這些類為基礎(chǔ)提出程序設(shè)計(jì)的思路和方法,包類為基礎(chǔ)提出程序設(shè)計(jì)的思路和方法,包括了算法的設(shè)計(jì)。在此設(shè)計(jì)階段,并不牽括了算法的設(shè)計(jì)。在此設(shè)計(jì)階段,并不牽涉某一具體的計(jì)算機(jī)語(yǔ)言。涉某一具體的計(jì)算機(jī)語(yǔ)言。2.面向?qū)ο竺嫦驅(qū)ο笤O(shè)計(jì)設(shè)計(jì)22根據(jù)面向?qū)ο笤O(shè)計(jì)的結(jié)果,用一種計(jì)算根據(jù)面向?qū)ο笤O(shè)計(jì)的結(jié)果,用一種計(jì)算機(jī)語(yǔ)言
17、把它寫成程序。機(jī)語(yǔ)言把它寫成程序。s C+s Dephis VBs Java3.面向?qū)ο缶幊堂嫦驅(qū)ο缶幊?3寫完程序交付用戶使用前,必須對(duì)程序?qū)懲瓿绦蚪桓队脩羰褂们?,必須?duì)程序進(jìn)行嚴(yán)格的調(diào)試,如果發(fā)現(xiàn)錯(cuò)誤,要及進(jìn)行嚴(yán)格的調(diào)試,如果發(fā)現(xiàn)錯(cuò)誤,要及時(shí)改正。時(shí)改正。面向?qū)ο鬁y(cè)試,是以類作為測(cè)試的基本面向?qū)ο鬁y(cè)試,是以類作為測(cè)試的基本單元用面向?qū)ο蟮姆椒▽?shí)施測(cè)試。單元用面向?qū)ο蟮姆椒▽?shí)施測(cè)試。4.面向?qū)ο鬁y(cè)試面向?qū)ο鬁y(cè)試24任何軟件產(chǎn)品在使用過(guò)程中,可能用戶任何軟件產(chǎn)品在使用過(guò)程中,可能用戶需要改進(jìn)軟件的性能,這就需要修改程需要改進(jìn)軟件的性能,這就需要修改程序。由于采用了面向?qū)ο蟮姆椒?,方便序。由于?/p>
18、用了面向?qū)ο蟮姆椒ǎ奖懔司S護(hù)程序。因?yàn)轭惖姆庋b性,修改一了維護(hù)程序。因?yàn)轭惖姆庋b性,修改一個(gè)類對(duì)其他類(非子類)影響很小,極個(gè)類對(duì)其他類(非子類)影響很小,極大提高了程序維護(hù)的效率。大提高了程序維護(hù)的效率。5.面向?qū)ο缶S護(hù)面向?qū)ο缶S護(hù)252.2.1 類和對(duì)象的關(guān)系類和對(duì)象的關(guān)系2.2.2 聲明類類型聲明類類型2.2.3 定義對(duì)象的方法定義對(duì)象的方法2.2.4 類和結(jié)構(gòu)體類型的異同類和結(jié)構(gòu)體類型的異同2.2 類的聲明和對(duì)象的定義類的聲明和對(duì)象的定義 26C+中對(duì)象的類型稱為類中對(duì)象的類型稱為類(class),類,類代表了某一批對(duì)象的共性和特征。代表了某一批對(duì)象的共性和特征。類是對(duì)類是對(duì)象的抽象
19、,而對(duì)象是類的具體實(shí)例象的抽象,而對(duì)象是類的具體實(shí)例。類是對(duì)象的模板,是用來(lái)定義對(duì)象的一種類是對(duì)象的模板,是用來(lái)定義對(duì)象的一種抽象類型。抽象類型。類是抽象的,不占用內(nèi)存空間,而對(duì)象是類是抽象的,不占用內(nèi)存空間,而對(duì)象是具體的,占用內(nèi)存空間。具體的,占用內(nèi)存空間。類是由若干個(gè)變量和相關(guān)的函數(shù)組成,而類是由若干個(gè)變量和相關(guān)的函數(shù)組成,而對(duì)象可以擁有這些變量和函數(shù)。對(duì)象可以擁有這些變量和函數(shù)。2.2.1 類和對(duì)象的關(guān)系類和對(duì)象的關(guān)系 27 聲明一個(gè)類時(shí)需要回答三個(gè)問(wèn)題:聲明一個(gè)類時(shí)需要回答三個(gè)問(wèn)題:1.類的名字是什么?類的名字是什么? 2.它在哪里定義?它在哪里定義? 3.它支持什么操作?它支持什么
20、操作? 使用類時(shí)不需要知道這個(gè)類是怎樣實(shí)現(xiàn)使用類時(shí)不需要知道這個(gè)類是怎樣實(shí)現(xiàn)的,相反,需要知道的是該類提供什么的,相反,需要知道的是該類提供什么操作。操作。2.2.2 聲明類類型聲明類類型 28Class Student int num; string name; char sex; void display();Student stu1,stu2;2.2.2 聲明類類型聲明類類型 聲明類并沒有為其聲明類并沒有為其分配內(nèi)存空間,分配內(nèi)存空間,只只是告訴編譯器它包是告訴編譯器它包含的成員是什么含的成員是什么29類定義格式:類定義格式:class 類名類名private: 私有成員私有成員 pub
21、lic: 公有成員公有成員 protected: 保護(hù)成員保護(hù)成員;class是保留字,聲明類類型是保留字,聲明類類型類名:按標(biāo)識(shí)符取名。類名:按標(biāo)識(shí)符取名。private、public、protected是是保留字,是成員訪問(wèn)限定保留字,是成員訪問(wèn)限定符,其后必須跟冒號(hào)。符,其后必須跟冒號(hào)。在類聲明的在類聲明的 后如不直接定義后如不直接定義對(duì)象就必須跟分號(hào)。對(duì)象就必須跟分號(hào)。2.2.2 聲明類類型聲明類類型 302.2.3 定義對(duì)象的方法定義對(duì)象的方法 1. 先聲明類類型,然后再定義對(duì)象先聲明類類型,然后再定義對(duì)象在聲明類類型后,像定義變量一樣定義在聲明類類型后,像定義變量一樣定義對(duì)象。對(duì)象
22、。(1) class 類名類名 對(duì)象名對(duì)象名 class Student stu1, stu2;(2) 類名類名 對(duì)象名對(duì)象名 Student stu1, stu2;為為對(duì)象分配內(nèi)存空間,對(duì)象分配內(nèi)存空間,存放對(duì)象的成員存放對(duì)象的成員312.在聲明類類型的同時(shí)定義對(duì)象在聲明類類型的同時(shí)定義對(duì)象 class student private: public: stu1, stu2;2.2.3 定義對(duì)象的方法定義對(duì)象的方法 323.不出現(xiàn)類名,直接定義對(duì)象不出現(xiàn)類名,直接定義對(duì)象 class private: public: stu1, stu2;M這種方法在這種方法在C+中雖然是合法的,但不中雖然
23、是合法的,但不提倡使用。提倡使用。2.2.3 定義對(duì)象的方法定義對(duì)象的方法 332.2.4 類和結(jié)構(gòu)體類型的異同類和結(jié)構(gòu)體類型的異同 C+允許用允許用struct定義一個(gè)類類型,這定義一個(gè)類類型,這是設(shè)計(jì)是設(shè)計(jì)C+時(shí)規(guī)定的一項(xiàng)原則:時(shí)規(guī)定的一項(xiàng)原則:C+必必須兼容須兼容C,讓,讓C程序不用修改就能在程序不用修改就能在C+環(huán)境中使用。環(huán)境中使用。 兩種定義方法的區(qū)別兩種定義方法的區(qū)別s 用用class聲明的類如果不帶成員訪問(wèn)限定符,聲明的類如果不帶成員訪問(wèn)限定符,所有成員默認(rèn)為所有成員默認(rèn)為private;s 用用struct聲明的類如果不帶成員訪問(wèn)限定聲明的類如果不帶成員訪問(wèn)限定符,所有成員默
24、認(rèn)為符,所有成員默認(rèn)為public。342.3 類的成員函數(shù)類的成員函數(shù) 2.3.1 成員函數(shù)的性質(zhì)成員函數(shù)的性質(zhì)2.3.2 在類外定義成員函數(shù)在類外定義成員函數(shù)2.3.3 內(nèi)置函數(shù)內(nèi)置函數(shù)2.3.4 成員函數(shù)的存儲(chǔ)方式成員函數(shù)的存儲(chǔ)方式352.3.1 成員函數(shù)的性質(zhì)成員函數(shù)的性質(zhì) 類的成員函數(shù)是函數(shù)的一種。類的成員函數(shù)是函數(shù)的一種。 成員函數(shù)與一般函數(shù)的區(qū)別:它屬于一成員函數(shù)與一般函數(shù)的區(qū)別:它屬于一個(gè)類,出現(xiàn)在類體中,可以被指定為個(gè)類,出現(xiàn)在類體中,可以被指定為public、private或或protected,可,可以訪問(wèn)本類中的所有成員。以訪問(wèn)本類中的所有成員。 一般將需要被外界調(diào)用的
25、成員函數(shù)指定一般將需要被外界調(diào)用的成員函數(shù)指定為為public,作為類與外界的,作為類與外界的對(duì)外接口對(duì)外接口。362.3.2 定義成員函數(shù)定義成員函數(shù) 方法方法1:直接在類體內(nèi)定義,其格式:直接在類體內(nèi)定義,其格式:class Student public: void display() coutnumendl;coutnameendl;coutsex hour minute sec ; 計(jì)算該類對(duì)象占用的字節(jié)數(shù)計(jì)算該類對(duì)象占用的字節(jié)數(shù) cout sizeof(Time) endl;2.3.4 成員函數(shù)的存儲(chǔ)方式成員函數(shù)的存儲(chǔ)方式 422.4.1 用對(duì)象名和成員運(yùn)算符訪問(wèn)成員用對(duì)象名和成員運(yùn)
26、算符訪問(wèn)成員2.4.2 用指向?qū)ο蟮闹羔樤L問(wèn)成員用指向?qū)ο蟮闹羔樤L問(wèn)成員2.4.3 用對(duì)象的引用訪問(wèn)成員用對(duì)象的引用訪問(wèn)成員2.4 對(duì)象成員的引用對(duì)象成員的引用 43 格式:對(duì)象名格式:對(duì)象名.成員名成員名 stu1.display(); M 注意:只有成員函數(shù)可以訪問(wèn)類中的所注意:只有成員函數(shù)可以訪問(wèn)類中的所有成員,而在類外只能訪問(wèn)公有成員。有成員,而在類外只能訪問(wèn)公有成員。 如果在類外面用下面的語(yǔ)句是錯(cuò)誤的:如果在類外面用下面的語(yǔ)句是錯(cuò)誤的: stu1.num = 101012.4.1通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)成員通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)成員 44class Student public
27、: int num;Student stu, *p; p= &stu;coutnumendl;2.4.2 通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)成員通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)成員 (*p).numstu.num452.4.3 通過(guò)對(duì)象的引用來(lái)訪問(wèn)成員通過(guò)對(duì)象的引用來(lái)訪問(wèn)成員 class Student public: int num;Student stu; Student &s=stu;cout s.numendl;462.5 類和對(duì)象的簡(jiǎn)單應(yīng)用舉例類和對(duì)象的簡(jiǎn)單應(yīng)用舉例#include using namespace std;class Time public: int hour; int m
28、inute; int sec;int main() Time t1; Time &t2=t1; cint2.hour; cint2.minute; cint1.sec; coutt1.hour:t1.minute :t2.secendl;M在引用成員之前加對(duì)象名而不是類名在引用成員之前加對(duì)象名而不是類名M數(shù)據(jù)成員必須有初始值后才能訪問(wèn),數(shù)據(jù)成員必須有初始值后才能訪問(wèn),否則它們的值是不可預(yù)知的否則它們的值是不可預(yù)知的M對(duì)象只能調(diào)用類中存在的成員對(duì)象只能調(diào)用類中存在的成員47例例2.2 引用多個(gè)對(duì)象引用多個(gè)對(duì)象的成員的成員(1)程序程序(a)#include using namespace
29、 std;class Timepublic: int hour; int minute; int sec;48int main() Time t1; cint1.hour t1.minutet1.sec; coutt1.hour:t1.minute :t1.sect2.hourt2.minutet2.sec; coutt2.hour:t2.minute :t2.sect.hour; cint.minute; cint.sec; void show_time(Time& t) coutt.hour:t.minute :t.secendl;51例例2.3 用成員函數(shù)處理輸入輸出用成員函數(shù)處
30、理輸入輸出#include using namespace std;class Timepublic:void set_time() ;void show_time(); private:int hour;int minute;int sec;52int main() Time t1; t1.set_time(); t1.show_time(); Time t2; t2.set_time(); t2.show_time(); return 0; 53void Time:set_time() cinhour; cinminute; cinsec; void Time:show_time() co
31、uthour:minute :secendl;54例例2.4 在整型數(shù)組中找最大值在整型數(shù)組中找最大值#include using namespace std;class Array_max public: void set_value(); void max_value(); void show_value(); private: int array10; int max;55void Array_max:set_value() int i; for (i=0;iarrayi;void Array_max:max_value() int i; max=array0; for (i=1;ima
32、x) max=arrayi;void Array_max:show_value() coutmax=num; cinname; cinage; /新增加的新增加的 cinsex;void student : display() cout numendl; cout nameendl; cout age endl; /新增加的新增加的 coutsex endl; 當(dāng)接口與實(shí)現(xiàn)當(dāng)接口與實(shí)現(xiàn)(對(duì)數(shù)據(jù)的操作對(duì)數(shù)據(jù)的操作)分離時(shí),只要分離時(shí),只要類的接口沒有改變,對(duì)私有實(shí)現(xiàn)的修改不會(huì)類的接口沒有改變,對(duì)私有實(shí)現(xiàn)的修改不會(huì)影響程序的其他部分。影響程序的其他部分。63 信息隱蔽的信息隱蔽的好處好處 如果在編
33、譯時(shí)發(fā)現(xiàn)類中的數(shù)據(jù)讀寫有錯(cuò),如果在編譯時(shí)發(fā)現(xiàn)類中的數(shù)據(jù)讀寫有錯(cuò),不必檢查整個(gè)程序,只需檢查本類中訪不必檢查整個(gè)程序,只需檢查本類中訪問(wèn)這些數(shù)據(jù)的成員函數(shù)。問(wèn)這些數(shù)據(jù)的成員函數(shù)。這就使得程序這就使得程序(尤其是大程序尤其是大程序)的設(shè)計(jì)、修改和調(diào)試變的設(shè)計(jì)、修改和調(diào)試變得方便和簡(jiǎn)單。得方便和簡(jiǎn)單。642.6.2 類聲明和成員函數(shù)定義的分離類聲明和成員函數(shù)定義的分離 將類的聲明將類的聲明(包括成員函數(shù)的聲明包括成員函數(shù)的聲明)放在放在頭文件中。在程序中只要把有關(guān)的頭文件頭文件中。在程序中只要把有關(guān)的頭文件包含進(jìn)來(lái)即可,不必在程序中重復(fù)寫類的包含進(jìn)來(lái)即可,不必在程序中重復(fù)寫類的聲明,以減少工作量,提高編程效率。聲明,以減少工作量,提高編程效率。 而將類的成員函數(shù)的執(zhí)行部分放在另外一而將類的成員函數(shù)的執(zhí)行部分放在另外一個(gè)個(gè).cpp文件,在該文件的開頭加上如下文件,在該文件的開頭加上如下代碼使頭文件與代碼使頭文件與.cpp相關(guān)聯(lián):相關(guān)聯(lián): #include *.h65/student.h#include Using namespace std; class student public: void setdata(); void display(); private: int num; string name; char sex;66/student.cpp#include #inc
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省丹東市本年度(2025)小學(xué)一年級(jí)數(shù)學(xué)部編版能力評(píng)測(cè)(上學(xué)期)試卷及答案
- 甘肅省河西五市2025年高三壓軸卷英語(yǔ)試卷含答案
- 流體力學(xué)考試模擬題(附參考答案)
- 2025屆新疆維吾爾自治區(qū)克拉瑪依市第十三中學(xué)高考英語(yǔ)三模試卷含解析
- 2025屆四川省南充市高三下學(xué)期第三次診斷考試物理試題(原卷版+解析版)
- 翻譯速度與質(zhì)量平衡訓(xùn)練考核試卷
- 河湖治理工程生態(tài)景觀設(shè)計(jì)考核試卷
- 電視機(jī)制造業(yè)的法律法規(guī)遵守與合規(guī)性考核試卷
- 紡織設(shè)備庫(kù)存管理與優(yōu)化考核試卷
- 珠寶首飾行業(yè)物流與供應(yīng)鏈優(yōu)化策略考核試卷
- 四川宜賓環(huán)球集團(tuán)有限公司招聘筆試真題2024
- 精神科護(hù)理目標(biāo)管理
- 矩陣運(yùn)算的新視角
- 人教版小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)期中綜合素養(yǎng)測(cè)評(píng)A卷(1-5單元)(含答案)
- 腸外營(yíng)養(yǎng)中電解質(zhì)補(bǔ)充中國(guó)專家共識(shí)(2024版)解讀
- 第六單元 有余數(shù)的除法測(cè)試卷(含答案)2024-2025學(xué)年二年級(jí)數(shù)學(xué)下冊(cè)人教版
- 2024年福建泉州文旅集團(tuán)招聘考試真題
- JJF 2186-2025激光多普勒流速儀校準(zhǔn)規(guī)范
- 銀行員工消保知識(shí)培訓(xùn)
- 2024至2030年中國(guó)蠶蛹毛油行業(yè)投資前景及策略咨詢研究報(bào)告
- 100以內(nèi)加法減法口算1000題家庭練習(xí)打印
評(píng)論
0/150
提交評(píng)論