![面向?qū)ο蟪绦蛟O(shè)計(jì).doc_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/6/aa2262e5-85a5-4cde-a1ff-ecd4a3711003/aa2262e5-85a5-4cde-a1ff-ecd4a37110031.gif)
![面向?qū)ο蟪绦蛟O(shè)計(jì).doc_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/6/aa2262e5-85a5-4cde-a1ff-ecd4a3711003/aa2262e5-85a5-4cde-a1ff-ecd4a37110032.gif)
![面向?qū)ο蟪绦蛟O(shè)計(jì).doc_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/6/aa2262e5-85a5-4cde-a1ff-ecd4a3711003/aa2262e5-85a5-4cde-a1ff-ecd4a37110033.gif)
![面向?qū)ο蟪绦蛟O(shè)計(jì).doc_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/6/aa2262e5-85a5-4cde-a1ff-ecd4a3711003/aa2262e5-85a5-4cde-a1ff-ecd4a37110034.gif)
![面向?qū)ο蟪绦蛟O(shè)計(jì).doc_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-12/6/aa2262e5-85a5-4cde-a1ff-ecd4a3711003/aa2262e5-85a5-4cde-a1ff-ecd4a37110035.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 面向?qū)ο蟪绦蛟O(shè)計(jì)n 結(jié)構(gòu)化程序設(shè)計(jì)的基本內(nèi)容:1. 結(jié)構(gòu)的類型:順序、分支、循環(huán)2. 結(jié)構(gòu)化程序設(shè)計(jì)思想:利用過程或函數(shù)來抽象和模擬客觀現(xiàn)實(shí)。3. 結(jié)構(gòu)化程序設(shè)計(jì)方法:1) 重點(diǎn)放在如何實(shí)現(xiàn)細(xì)節(jié)過程方面,將數(shù)據(jù)與函數(shù)分開。2) 形式:主模塊+若干個(gè)子模塊(如:main()+子函數(shù))。4. 特點(diǎn):自頂向下,逐步求精功能分解。5. 缺點(diǎn):效率低,是手工作坊式的編程。6. 結(jié)構(gòu)化程序的問題數(shù)據(jù)與算法分離,程序數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)是分離的。n 面向?qū)ο蟪绦蛟O(shè)計(jì)觀點(diǎn):1. 自然界是由各種各樣的實(shí)體(對(duì)象)所組成,每種對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對(duì)象之間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系
2、統(tǒng),進(jìn)而構(gòu)成整個(gè)客觀世界。2. 程序設(shè)計(jì)方法:使用面向?qū)ο蟮挠^點(diǎn)來描述模仿并處理現(xiàn)實(shí)問題。3. 要求:高度概括、分類和抽象。4. 目的:實(shí)現(xiàn)軟件設(shè)計(jì)的產(chǎn)業(yè)化。5. 基本概念:1) 對(duì)象:用來描述客觀事物的一個(gè)實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單元。一個(gè)對(duì)象具有一組屬性和行為。實(shí)體對(duì)象*一臺(tái)計(jì)算機(jī)抽象對(duì)象*一項(xiàng)計(jì)劃2) 對(duì)象構(gòu)成要素:對(duì)象標(biāo)識(shí)符:是對(duì)象的名稱,用來區(qū)別于其他對(duì)象。屬性:是用來描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。行為:是用來描述對(duì)象動(dòng)態(tài)特征和行為的操作。3) 消息(Message)用于描述事件發(fā)生的信息。消息是對(duì)象之間發(fā)出的行為請(qǐng)求。多個(gè)消息構(gòu)成一個(gè)事件(Event)。對(duì)象之間通過傳遞消息相互
3、影響。對(duì)象示例:一個(gè)“學(xué)生”對(duì)象的例子對(duì)象名:學(xué)生屬性:學(xué)號(hào):123456姓名:令狐沖年齡:18專業(yè):信管行為:修改學(xué)號(hào)、姓名、專業(yè)、年齡等等對(duì)象示例:一個(gè)“課程”對(duì)象的例子:對(duì)象名:課程屬性:課程號(hào):123456課程名:程序設(shè)計(jì)任課教師:莫名選課要求:學(xué)時(shí):48行為:獲取并修改課程名、課程號(hào)、學(xué)時(shí)數(shù)、選課要求、任課教師等4) 類:是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供統(tǒng)一的抽象描述,是對(duì)象集合的再抽象。5) 類和對(duì)象的關(guān)系:類(抽象定義)對(duì)象(實(shí)例)6) 類對(duì)象舉例學(xué)生學(xué)生王強(qiáng)課程C+程序設(shè)計(jì)類型變量,如C語(yǔ)言中的int和int x;7) 類的實(shí)例用類定義的類變量,
4、即對(duì)象。類是對(duì)多個(gè)特性相同的對(duì)象實(shí)例的抽象,所以同一類的不同實(shí)例之間必有:l 相同的操作集合l 相同的屬性集合l 不同的對(duì)象名,分配有不同的存儲(chǔ)空間。8) 類的確定與劃分:類的確定對(duì)所遇到的對(duì)象進(jìn)行分析、歸納,根據(jù)共同的特征來確定一個(gè)類。類的確定的方法:l 判斷是否有一個(gè)以上的實(shí)例l 判斷類的實(shí)例中是否有絕對(duì)的不同點(diǎn)9) 類的劃分不是絕對(duì)的,可以根據(jù)不同的實(shí)際需要確定不同的類。n 面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn):1. 抽象性:抽象(abstract)是指有意忽略問題的某些細(xì)節(jié)和與當(dāng)前目標(biāo)無關(guān)的方面,以便把問題的本質(zhì)表達(dá)得更清楚。2. 封裝性:1) 封裝encapsulation將數(shù)據(jù)和與這個(gè)數(shù)據(jù)有關(guān)的
5、操作集合在一起,形成一個(gè)實(shí)體對(duì)象,且盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)。2) 特點(diǎn):l 具有一個(gè)清楚的邊界,對(duì)象的所有私有數(shù)據(jù)、內(nèi)部程序(成員函數(shù))細(xì)節(jié)都被固定在這個(gè)邊界內(nèi)。l 具有一個(gè)接口,描述了對(duì)象之間的相互作用、請(qǐng)求和響應(yīng)消息。l 對(duì)象內(nèi)部的實(shí)現(xiàn)代碼受到封裝殼的保護(hù),其它對(duì)象不能直接修改本對(duì)象所擁有的數(shù)據(jù)和代碼。l 封裝的單位是對(duì)象。3) 封裝性:l 從外面看只能看到對(duì)象的外部特性,即能夠受理哪些信息,具有哪些處理能力;對(duì)象的內(nèi)部,即處理能力的實(shí)行和內(nèi)部狀態(tài),對(duì)外是不可見的。l 從外面不能直接使用對(duì)象的處理能力,也不能直接修改其內(nèi)部狀態(tài),對(duì)象的內(nèi)部狀態(tài)只能由其自身改變。4) 封裝的優(yōu)點(diǎn):l 降低部
6、件間的耦合度,提高部件的獨(dú)立性l 具有隱藏性和安全性(如銀行的賬戶)l 易于維護(hù)(由于數(shù)據(jù)獨(dú)立,易于發(fā)現(xiàn)問題)l 封裝將對(duì)象的使用者與設(shè)計(jì)者分開,使用者只需要通過接口訪問對(duì)象,不必了解對(duì)象的內(nèi)部細(xì)節(jié),提高了軟件復(fù)用。5) 封裝的缺點(diǎn):l 需要更多的輸入輸出函數(shù)。6) 抽象與封裝形成了程序接口與實(shí)現(xiàn)的分離。3. 繼承性:繼承性是指特殊類的對(duì)象擁有其一般類的屬性和行為的特性。1) 繼承:繼承是一種聯(lián)結(jié)類與類的層次模型。對(duì)象類之間的相交關(guān)系,使得某類對(duì)象可以繼承另外一類對(duì)象的特征和功能。2) 類間具有繼承關(guān)系的特性:l 類間具有共享特征(包括數(shù)據(jù)和程序代碼的共享):遺傳l 類間具有細(xì)微差別或新增部分
7、(包括非共享的程序代碼和數(shù)據(jù)):變異l 類間具有層次結(jié)構(gòu)(如同人類通過繼承構(gòu)成了家族關(guān)系一樣)3) 繼承分類:l 從繼承源上劃分:?jiǎn)卫^承(一個(gè)派生類只有一個(gè)基類)、多繼承(一個(gè)派生類有多個(gè)基類)l 從繼承內(nèi)容上劃分:取代繼承、包含繼承、受限繼承、特化繼承。4) 繼承的作用:l 實(shí)現(xiàn)軟件的可重用性l 實(shí)現(xiàn)軟件的獨(dú)立性l 增加軟件的可維護(hù)性2) 繼承與封裝的關(guān)系:l 封裝是指對(duì)象的封裝,在對(duì)象中數(shù)據(jù)和操作總是包裹在一起的,繼承不會(huì)影響對(duì)象的這種封裝性,但無限制的派生繼承會(huì)在一定程度上損害對(duì)象中數(shù)據(jù)的隱蔽性。l 封裝使類定義中實(shí)現(xiàn)的代碼可以用于該類的各個(gè)實(shí)例(對(duì)象)中,實(shí)現(xiàn)了動(dòng)態(tài)共享代碼;繼承使得派
8、生類能與基類共享基類中實(shí)現(xiàn)的代碼,實(shí)現(xiàn)了靜態(tài)共享代碼。3) 類的層次:由一個(gè)類可以派生出任意多個(gè)派生類,這樣就形成了類的層次關(guān)系,這是現(xiàn)實(shí)世界中事物的分類問題在計(jì)算機(jī)中的解形式。4) 繼承的優(yōu)勢(shì):l 能清晰體現(xiàn)相關(guān)類間的層次結(jié)構(gòu)關(guān)系。l 有效地址提高了程序的可重用性,減小了程序代碼的冗余度。l 增強(qiáng)了程序的一致性,減少了程序模塊間的接口和界面,使程序更易維護(hù)。l 繼承是自動(dòng)傳播程序代碼的有力工具。l 繼承是新類構(gòu)造、建立和擴(kuò)充的有效手段。l 繼承具有傳遞性。如果類C繼承類B,類B繼承類A,則類C繼承類A。l “站在巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時(shí)不必從零開始,可以繼承原有相似功能或者從類庫(kù)中
9、選取需要的類,再派生新類。5) 例:人類按職業(yè)劃分的一種繼承關(guān)系4. 多態(tài)性:1) 多態(tài)polymorphism:多態(tài)是指類中同一函數(shù)名對(duì)應(yīng)多個(gè)具有相似功能的不同函數(shù)。對(duì)象根據(jù)所接受的消息而做出動(dòng)作,同樣的消息為不同的對(duì)象接受時(shí)可導(dǎo)致完全不同的行動(dòng),該現(xiàn)象稱為多態(tài)性。簡(jiǎn)單地說:?jiǎn)谓涌?,多?shí)現(xiàn)。舉例:sqrt_i (int i),sqrt_f (float f)sqrt (int i),sqrt (float f)2) 多態(tài)性:指可以使用相同的調(diào)用方式來調(diào)用這些具有不同功能的同名函數(shù)的特性。3) 作用:l 減輕程序員負(fù)擔(dān)l 降低程序員出錯(cuò)機(jī)率4) 多態(tài)性的實(shí)現(xiàn):l 運(yùn)行時(shí)多態(tài)性:虛函數(shù)l 編譯時(shí)
10、多態(tài)性:重載l 重載函數(shù)重載:是指在同一作用域內(nèi)的若干個(gè)參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。運(yùn)算符重載:是指同一個(gè)運(yùn)算符可以施加于不同類型的操作數(shù)上面。優(yōu)點(diǎn):重載進(jìn)一步提高了面向?qū)ο笙到y(tǒng)的靈活性和可讀性。5) 例:下圖中同名函數(shù)person( )作用在Student、Teacher等不同類上時(shí),將執(zhí)行不同的操作,這就是多態(tài)。n 面向?qū)ο笈c面向過程程序設(shè)計(jì)比較:1. 面向過程程序設(shè)計(jì)的基本特點(diǎn):1) 按層次組織模塊。2) 每一模塊只有一個(gè)入口,一個(gè)出口。3) 代碼和數(shù)據(jù)分離,即程序=數(shù)據(jù)結(jié)構(gòu)+算法。 4) 方法:自頂向下,逐步求精,模塊化2. 面向?qū)ο蟪绦蛟O(shè)計(jì):1) 它將數(shù)據(jù)和操作數(shù)據(jù)的過
11、程(函數(shù))綁在一起,形成一個(gè)相互依存、不可分離的整體(即對(duì)象),從同類對(duì)象中抽象出共性,形成類。2) 同類對(duì)象中的數(shù)據(jù)原則上只能用本類提供的方法(成員函數(shù))進(jìn)行處理。類通過封裝將接口與實(shí)現(xiàn)分離開來,通過接口與外界聯(lián)系。對(duì)象之間通過消息進(jìn)行通信。3. 兩種程序方法的對(duì)比:面向?qū)ο蟪绦蛟O(shè)計(jì)將數(shù)據(jù)和操作數(shù)據(jù)的程序代碼綁在一起構(gòu)成對(duì)象,具有更好的可維護(hù)性,因某類對(duì)象數(shù)據(jù)的改變只會(huì)引起該類對(duì)象操作代碼的改變,而與其他類型的對(duì)象無關(guān),這就把程序代碼的修改維護(hù)局限在一個(gè)很小的范圍內(nèi)。4. 面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn):1) 符合人們習(xí)慣的思維方法,便于分解大型的復(fù)雜多變的問題。由于對(duì)象對(duì)應(yīng)于現(xiàn)實(shí)世界中的實(shí)體,因而
12、可以很自然地按照現(xiàn)實(shí)世界中處理實(shí)體的方法來處理對(duì)象,軟件開發(fā)者可以很方便地與問題提出者進(jìn)行溝通和交流。2) 易于軟件的維護(hù)和功能的增減。對(duì)象的封裝性及對(duì)象之間的松散組合,都給軟件的修改和維護(hù)帶來了方便。采用面向?qū)ο笏枷朐O(shè)計(jì)的結(jié)構(gòu),可讀性高,由于繼承的存在,即使改變需求,那么維護(hù)也只是在局部模塊,所以維護(hù)起來是非常方便和較低成本的。3) 可重用性好。重復(fù)使用一個(gè)類(類是對(duì)象的定義,對(duì)象是類的實(shí)例化),可以比較方便地構(gòu)造出軟件系統(tǒng),加上繼承的方式,極大地提高了軟件開發(fā)的效率。4) 與可視化技術(shù)相結(jié)合,改善了工作界面。隨著基于圖形界面操作系統(tǒng)的流行,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法也將深入人心。它與可視化技術(shù)
13、相結(jié)合,使人機(jī)界面進(jìn)入GUI時(shí)代。5) 質(zhì)量高。在設(shè)計(jì)時(shí),可重用現(xiàn)有的,在以前的項(xiàng)目的領(lǐng)域中已被測(cè)試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量。6) 擴(kuò)展方便。由于繼承、封裝、多態(tài)的特性,自然設(shè)計(jì)出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、更容易擴(kuò)展,而且成本較低。n 三種常用面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言簡(jiǎn)介:1. 混合型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C+2. 純面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言Java3. 可視化程序設(shè)計(jì)語(yǔ)言Visual Basic /四人中有一人中了獎(jiǎng),小李問這四人時(shí),回答如下:/A:不是我/B:是C/C:是D/D:C胡說/已知其中三人說的是真話,一人說假話,試根據(jù)這些信息找出中獎(jiǎng)?wù)?include vo
14、id main()int k=0,count=0,sum=0;char thisman;for(k=0;k=3;k+)thisman=A+k;sum=(thisman!=A)+(thisman=C)+(thisman=D)+(thisman!=D);if(sum=3)printf(中獎(jiǎng)?wù)邽椋?cn,thisman);count+;if(count=0)printf(無解!n);elseprintf(共有:%d種符合條件的情況!n,count);/四人中有一人中了獎(jiǎng),小李問這四人時(shí),回答如下:/A:不是我/B:是C/C:是D/D:C胡說/已知其中三人說的是真話,一人說假話,試根據(jù)這些信息找出中獎(jiǎng)
15、者#include class Findpublic:void answer()int k=0,count=0,sum=0;char thisman;for(k=0;k=3;k+)thisman=A+k;sum=(thisman!=A)+(thisman=C)+(thisman=D)+(thisman!=D);if(sum=3)printf(中獎(jiǎng)?wù)邽椋?cn,thisman);count+;if(count=0)printf(無解!n);elseprintf(共有:%d種符合條件的情況!n,count);void main()Find it;it.answer();/四人中有一人中了獎(jiǎng),小李問
16、這四人時(shí),回答如下:/A:不是我/B:是C/C:是D/D:C胡說/已知其中三人說的是真話,一人說假話,試根據(jù)這些信息找出中獎(jiǎng)?wù)?include class Findpublic:void answer()int k=0,count=0,sum=0;char thisman;for(k=0;k=3;k+)thisman=A+k;sum=(thisman!=A)+(thisman=C)+(thisman=D)+(thisman!=D);if(sum=3)printf(中獎(jiǎng)?wù)邽椋?cn,thisman);count+;if(count=0)printf(無解!n);elseprintf(共有:%d種
17、符合條件的情況!n,count);Find()printf(-歡迎使用-n);void main()Find it;it.answer();6.0教學(xué)資料1. /C+程序的基本結(jié)構(gòu)#include #define PI 3.1415926 void main() double r,area; coutr; area=PI*r*r; cout圓面積為:areaendl;2. /結(jié)構(gòu)體示例#include struct stu_score char name12; char NO9; float score3; stuone=李明,21020501,80,85,85; void main() do
18、uble aver; aver=(stuone.score0+stuone.score1+stuone.score2)/3; cout平均成績(jī)?yōu)椋篴ver、=、=、!=6. 自增(+)自減(-)運(yùn)算符7. 邏輯運(yùn)算符:與(&)、或(|)、非(!)u 按位與(&)u 按位或(|)u 按位異或()u 取反()u 左移()8. 符合位運(yùn)算符賦值:&=、|=、=、=、=9. sizeof運(yùn)算符10. 逗號(hào)運(yùn)算符11. 內(nèi)存管理運(yùn)算符:u new:double *p;p=new double;int *p;p=new int(40);/開辟60個(gè)int型內(nèi)存單元u delete:delete p;12.
19、 /帶默認(rèn)參數(shù)值的函數(shù)#include void display(int a,int b=2,int c=3) couta=a,b=b,c=cendl;void main() display(1); display(1,5); display(1,5,7);13. /函數(shù)重載#include int sum(int a,int b) return a+b;int sum(int a,int b,int c) return a+b+c;double sum(double a,double b) return a+b;double sum(double a,double b,double c) r
20、eturn a+b+c;void main() coutsum(1,2)endl; coutsum(1,2,3)endl; coutsum(1.0,2.0)endl; coutsum(1.0,2.0,3.0)endl;14. /函數(shù)參數(shù)的指針傳遞#include void swap(int *x,int *y) int temp; temp=*x; *x=*y; *y=temp;void main() int a(10),b(100); cout交換前:a,bendl; swap(&a,&b); cout交換后:a,bendl;15. /函數(shù)參數(shù)的引用傳遞(引用實(shí)質(zhì)是已定義變量的別名)#inc
21、lude void swap(int &x,int &y) int temp; temp=x; x=y; y=temp;void main() int a(10),b(100); cout交換前:a,bendl; swap(a,b); cout交換后:a,bendl;16. 變量作用域1) 程序級(jí):包含組成該程序的所有文件。屬于程序級(jí)作用域的有外部函數(shù)和外部變量2) 文件級(jí):僅在定義它的文件內(nèi)有效。屬于文件級(jí)作用域的有內(nèi)部函數(shù)和外部靜態(tài)變量3) 函數(shù)級(jí):僅在定義它的函數(shù)體內(nèi)有效。屬于函數(shù)級(jí)作用域的有函數(shù)的形參和函數(shù)內(nèi)定義的自動(dòng)類變量4) 塊級(jí):屬于塊級(jí)的有定義在分程序、if語(yǔ)句、switch語(yǔ)
22、句及循環(huán)語(yǔ)句中的自動(dòng)變量、寄存器類變量和內(nèi)部靜態(tài)變量其中作用域?qū)儆谇皟深惖淖兞苛?xí)慣上稱為全局變量,屬于后兩類的稱為局部變量。另外有以下說明:1) 內(nèi)部函數(shù)的定義用關(guān)鍵字static實(shí)現(xiàn),外部函數(shù)的定義用關(guān)鍵字extern實(shí)現(xiàn),靜態(tài)變量(包括內(nèi)部的及外部的)用關(guān)鍵字static實(shí)現(xiàn),函數(shù)的默認(rèn)類型為外部函數(shù)2) 外部變量、外部靜態(tài)變量、內(nèi)部靜態(tài)變量定義時(shí)有默認(rèn)值:int型的為0;浮點(diǎn)型的為0.0;char型的為空17. /用類計(jì)算平均分#include #include class CStuScorepublic: char name7; char no9; CStuScore(float s0
23、,float s1,float s2) fScore0=s0; fScore1=s1; fScore2=s2; void SetScore(float s0,float s1,float s2) fScore0=s0; fScore1=s1; fScore2=s2; CStuScore() cout-n; float GetAverage(); void ShowScore() coutname的平均成績(jī)?yōu)椋篏etAverage()endl; private: float fScore3;float CStuScore:GetAverage() return (float)(fScore0+f
24、Score1+fScore2)/3);void main() CStuScore one(60,70,74); strcpy(,李明); strcpy(one.no,21010101); one.ShowScore(); one.SetScore(60,88,64); one.ShowScore();18. /對(duì)象成員的初始化#include class CPointpublic: CPoint(int x,int y) nPosX=x; nPosY=y; void ShowPos() cout當(dāng)前位置:x=nPosX,y=nPosYendl; private: int nPo
25、sX,nPosY;class CSizepublic: CSize(int l,int w) nLength=l; nWidth=w; void ShowSize() cout當(dāng)前大小:l=nLength,w=nWidthendl; private: int nLength,nWidth;class CRectpublic: CRect(int left,int top,int right,int bottom); void Show() ptCenter.ShowPos(); size.ShowSize(); private: CPoint ptCenter; CSize size;CRec
26、t:CRect(int left,int top,int right,int bottom):size(right-left,bottom-top),ptCenter(right+left)/2,(bottom+top)/2)void main() CRect rc(10,100,80,250); rc.Show();19. /通過友元實(shí)現(xiàn)對(duì)類中私有成員及保護(hù)成員的訪問#include class CPointpublic: CPoint() m_x=m_y=0; CPoint(unsigned x,unsigned y) m_x=x; m_y=y; void print() coutX=m_
27、x,Y=m_yendl; friend CPoint Inflate(CPoint &pt,int nOffset);/聲明友元函數(shù)private: unsigned m_x,m_y;CPoint Inflate(CPoint &pt,int nOffset)/定義友元函數(shù) CPoint ptTemp=pt; ptTemp.m_x+=nOffset; ptTemp.m_y+=nOffset; return ptTemp;void main() CPoint pt(10,20); pt.print(); pt=Inflate(pt,3);/調(diào)用友元函數(shù) pt.print();20. /繼承#in
28、clude #define PI 3.1415926class graphpublic: graph() circumference=0; area=0; void show() cout周長(zhǎng)為:circumference,面積為:areaendl; double circumference,area;class circle:public graphpublic: circle(double x=0) r=x; void setr(double x) r=x; void calculate() circumference=2*PI*r; area=PI*r*r; private: doubl
29、e r;class rectangle:public graphpublic: rectangle(double x=0,double y=0) a=x; b=y; void setab(double x,double y) a=x; b=y; void calculate() circumference=2*(a+b); area=a*b; private: double a,b; void main() graph g; circle c(10); rectangle rec(2,5); g.show(); c.show(); c.setr(100); c.calculate(); c.s
30、how(); rec.show(); rec.calculate(); rec.show(); rec.setab(20,50); rec.calculate(); rec.show();21. /虛函數(shù),實(shí)現(xiàn)“運(yùn)行時(shí)多態(tài)性”的方式#include #define PI 3.1415926class CShapepublic: virtual float area()/定義虛函數(shù) return 0; ;class CTriangle:public CShapepublic: CTriangle(float h,float w) H=h; W=w; float area() return(flo
31、at)(H*W*0.5); private: float H,W;class CCircle:public CShapepublic: CCircle(float r) R=r; float area() return(float)(PI*R*R); private: float R;void main() CShape *s2; s0=new CTriangle(3,4); coutarea()endl; s1=new CCircle(5); coutarea()endl;/說明:/、虛函數(shù)在重新定義時(shí)參數(shù)的個(gè)數(shù)、類型必須和基類中的虛函數(shù)安全匹配/、虛函數(shù)的上述功能,只有通過基類指針才能實(shí)現(xiàn)
32、22. /純虛函數(shù):無法預(yù)先確定基類中虛函數(shù)的具體實(shí)現(xiàn)時(shí)采用純虛函數(shù)#include #define PI 3.1415926class CShapepublic: virtual float area()=0;/定義純虛函數(shù),此時(shí)沒有具體的代碼實(shí)現(xiàn);class CTriangle:public CShapepublic: CTriangle(float h,float w) H=h; W=w; float area()/純虛函數(shù)在派生類中的具體實(shí)現(xiàn)代碼 return(float)(H*W*0.5); private: float H,W;class CCircle:public CShape
33、public: CCircle(float r) R=r; float area()/純虛函數(shù)在派生類中的具體實(shí)現(xiàn)代碼 return(float)(PI*R*R); private: float R;void main() CShape *s2; s0=new CTriangle(3,4); coutarea()endl; s1=new CCircle(5); coutarea()endl;23. /運(yùn)算符重載:是實(shí)現(xiàn)“編譯時(shí)多態(tài)性”的一種手段#include class CComplexpublic: CComplex(double r=0,double i=0) realPart=r; i
34、magePart=i; void print() cout該復(fù)數(shù)為:=0) cout+imagePartiendl; else cout-imagePartiendl; CComplex operator+(CComplex &c);/重載運(yùn)算符+ CComplex operator+(double r); /重載運(yùn)算符+private: double realPart; double imagePart;CComplex CComplex:operator+(CComplex &c)/參數(shù)是CComplex的引用對(duì)象 CComplex temp; temp.realPart=realPart
35、+c.realPart; temp.imagePart=imagePart+c.imagePart; return temp;CComplex CComplex:operator+(double r)/參數(shù)是double類型變量 CComplex temp; temp.realPart=realPart+r; temp.imagePart=imagePart; return temp;void main() CComplex c1(12,20),c2(50,70),c; c=c1+c2; c.print(); c=c1+20; c.print();24. /賦值運(yùn)算符重載:錯(cuò)誤使用開會(huì)運(yùn)算符的
36、情況/相同類型或匹配類型可以直接賦值,但當(dāng)對(duì)的的成員中有數(shù)組或動(dòng)態(tài)數(shù)據(jù)類型時(shí)就不能直接賦值,如下:#include #include class CDemopublic: CDemo(char *s) ps=new charstrlen(s)+1; strcpy(ps,s); CDemo() if(ps) deleteps; void print() coutpsendl; private: char *ps;void main() CDemo d1(key),d2(Mouse); d1=d2; d1.print(); d2.print();/在運(yùn)行到“d1=d2”時(shí)出錯(cuò)。25. /賦值運(yùn)算符
37、重載#include #include class CDemopublic: CDemo(char *s) ps=new charstrlen(s)+1; strcpy(ps,s); CDemo & operator =(CDemo &a) if(ps) deleteps; if(a.ps) ps=new charstrlen(a.ps)+1; strcpy(ps,a.ps); else ps=0; return *this; CDemo() if(ps) deleteps; void print() coutpsendl; private: char *ps;void main() CDemo d1(key),d2(Mouse); d1=d2; d1.print(); d2.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/TR 18228-5:2025 EN Design using geosynthetics - Part 5: Stabilization
- 2025年度廢電池?zé)o害化處理承包服務(wù)
- 2025年度皮草產(chǎn)品售后服務(wù)合同范本
- The 2025 Optimove Insights消費(fèi)者營(yíng)銷疲勞報(bào)告
- 2025年度房地產(chǎn)市場(chǎng)動(dòng)態(tài)監(jiān)測(cè)評(píng)估合同
- 2025年圖形、圖象處理設(shè)備項(xiàng)目建議書
- 2025年度二手車交易居間服務(wù)合同范本
- 2025年度大型體育賽事贊助商權(quán)益轉(zhuǎn)讓合同
- 2025年度企業(yè)安全協(xié)管員崗位職責(zé)合同
- 2025年度離婚后債務(wù)分配與財(cái)產(chǎn)分割協(xié)議書
- 2022年全國(guó)職業(yè)院校技能大賽賽項(xiàng)-ZZ-2022039戲曲表演賽項(xiàng)基礎(chǔ)知識(shí)試題答案(70公開題)
- 中國(guó)高血壓防治指南(2024年修訂版)核心要點(diǎn)解讀
- 全新車位轉(zhuǎn)讓協(xié)議模板下載(2024版)
- 金屬焊接和切割作業(yè)教案
- 《遙感地質(zhì)學(xué)》全冊(cè)配套完整教學(xué)課件
- 學(xué)科帶頭人工作計(jì)劃
- 高中數(shù)學(xué)必修一試卷及答案
- 礦石買賣協(xié)議書
- 2024年岳陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2023新蘇教版六年級(jí)下冊(cè)科學(xué)學(xué)生活動(dòng)手冊(cè)答案
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻(xiàn)綜述3400字】
評(píng)論
0/150
提交評(píng)論