面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、教 案2013 2014 學(xué)年 第 一 學(xué)期學(xué) 院、 系 室 計(jì)算機(jī)科學(xué)系課 程 名 稱(chēng) 面向?qū)ο蟪绦蛟O(shè)計(jì)專(zhuān)業(yè)、年級(jí)、班級(jí) 12計(jì)算機(jī)嵌入式系統(tǒng) 、網(wǎng)絡(luò)和信息安全班 主 講 教 師 蔣琳瓊梧州學(xué)院面向?qū)ο蟪绦蛟O(shè)計(jì)教案課時(shí)分配:理論課39學(xué)時(shí),實(shí)驗(yàn)課12學(xué)時(shí),共51學(xué)時(shí)第1章 c+初步知識(shí)一、教學(xué)目的: 熟悉如何編緝、編譯、連接和運(yùn)行一個(gè)c+程序,了解在面向過(guò)程程序設(shè)計(jì)中c+對(duì)c功能的擴(kuò)充與增強(qiáng),并善于在編寫(xiě)程序過(guò)程中應(yīng)用這些新的功能。學(xué)時(shí)分配:9學(xué)時(shí)二、教學(xué)重點(diǎn):了解軟件設(shè)計(jì)、開(kāi)發(fā)思想的演變,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的發(fā)展;理解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想;熟悉如何編緝、編譯、連接和運(yùn)行一個(gè)c+程序

2、,熟悉c+程序的結(jié)構(gòu)和編程方法。三、教學(xué)難點(diǎn):善于在編寫(xiě)程序過(guò)程中應(yīng)用這些新的c+對(duì)c功能的擴(kuò)充與增強(qiáng)功能四、教學(xué)方法:課題講授及面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例演示五、教學(xué)過(guò)程設(shè)計(jì):(9學(xué)時(shí))1. c+語(yǔ)言的發(fā)展,最簡(jiǎn)單的c+程序11程序設(shè)計(jì)方法的發(fā)展和演變大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用c語(yǔ)言編寫(xiě)的但是隨著軟件規(guī)模的增大,用c語(yǔ)言編寫(xiě)程序漸漸顯得有些吃力了c+是由at&t bell(貝爾)實(shí)驗(yàn)室的bjarne stroustrup博士及其同事于20世紀(jì)80年代初在c語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)成功的c+保留了c語(yǔ)言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制c+是由c發(fā)展而來(lái)的,與c兼容用c語(yǔ)言寫(xiě)的程序基本上可以不加修

3、改地用于c+從c+的名字可以看出它是c的超集c+既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型的程序設(shè)計(jì)語(yǔ)言c+對(duì)c的“增強(qiáng)”,表現(xiàn)在兩個(gè)方面: (1) 在原來(lái)面向過(guò)程的機(jī)制基礎(chǔ)上,對(duì)c語(yǔ)言的功能做了不少擴(kuò)充(2) 增加了面向?qū)ο蟮臋C(jī)制當(dāng)前用得較為廣泛的c+有:vc+ (visual c plus plus)、 bc+(borland c plus plus)、gcc、at&t c+等。 如果選擇了項(xiàng),就會(huì)在工程所在的目錄下產(chǎn)生一個(gè)新的目錄release,在release目錄下生成的可執(zhí)行程序代碼規(guī)模小,執(zhí)行效率高,是我們最后的產(chǎn)品. 至此,即已生成了一個(gè)

4、完整的程序.但要說(shuō)明一點(diǎn),我們現(xiàn)在vc+所編制的程序是運(yùn)行于windows中的dos仿真環(huán)境下,至于編制真正的windows程序還有很長(zhǎng)的一段路要走.12面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想下面舉一個(gè)包含類(lèi)(class)和對(duì)象(object)的c+程序,目的是使讀者初步了解c+是怎樣體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的例1.4 包含類(lèi)的c+程序#include / 預(yù)處理命令using namespace std;class student/ 聲明一個(gè)類(lèi),類(lèi)名為studentprivate: / 以下為類(lèi)中的私有部分int num; / 私有變量numint score; / 私有變量scorepublic: /

5、 以下為類(lèi)中的公用部分void setdata( ) / 定義公用函數(shù)setdatacinnum; / 輸入num的值cinscore; / 輸入score的值 void display( ) / 定義公用函數(shù)displaycoutnum=numendl; / 輸出num的值 coutscore=scoreendl;/輸出score的值 ; / 類(lèi)的聲明結(jié)束student stud1,stud2; /定義stud1和stud2為student類(lèi)的變量,稱(chēng)為對(duì)象int main( )/ 主函數(shù)首部stud1.setdata( ); / 調(diào)用對(duì)象stud1的setdata函數(shù) stud2.setd

6、ata( ); / 調(diào)用對(duì)象stud2的setdata函數(shù) stud1.display( ); / 調(diào)用對(duì)象stud1的display函數(shù)stud2.display( ); / 調(diào)用對(duì)象stud2的display函數(shù)return 0;13最簡(jiǎn)單的c+程序最簡(jiǎn)單的c+程序例1.1 輸出一行字符: “this is a c+ program.”程序如下: #include /包含頭文件iostreamusing namespace std; /使用命名空間stdint main( )coutthis is a c+ program.;return 0;在運(yùn)行時(shí)會(huì)在屏幕上輸出以下一行信息:this

7、is a c+ program. 例1.2 求a和b兩個(gè)數(shù)之和可以寫(xiě)出以下程序: / 求兩數(shù)之和 (本行是注釋行)#include /預(yù)處理命令using namespace std; /使用命名空間stdint main( ) /主函數(shù)首部 /函數(shù)體開(kāi)始 int a,b,sum; /定義變量 cinab; /輸入語(yǔ)句 sum=a+b;/賦值語(yǔ)句couta+b=sumendl; /輸出語(yǔ)句return 0; /如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值 /函數(shù)結(jié)束例1.3 給兩個(gè)數(shù)x和y,求兩數(shù)中的大者在本例中包含兩個(gè)函數(shù)#include /預(yù)處理命令using namespace std;int

8、 max(int x,int y)/定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型 /max函數(shù)體開(kāi)始int z;/變量聲明,定義本函數(shù)中用到的變量z為整型if(xy) z=x;/if語(yǔ)句,如果xy,則將x的值賦給zelse z=y; /否則,將y的值賦給z return(z);/將z的值返回,通過(guò)max帶回調(diào)用處 /max函數(shù)結(jié)束int main( ) /主函數(shù) /主函數(shù)體開(kāi)始 int a,b,m;/變量聲明cinab;/輸入變量a和b的值m=max(a,b); /調(diào)用max函數(shù),將得到的值賦給mcoutmax=mabendl;有什么問(wèn)題?2.關(guān)系運(yùn)算符將表達(dá)式連接起來(lái)稱(chēng)為關(guān)系表達(dá)式。其

9、值非真即假。在c+語(yǔ)言中,用非0代表真,用0表示假。關(guān)系表達(dá)式的結(jié)果只有兩個(gè),真為1,假為0。 3.語(yǔ)句coutab,c“a”; 有什么問(wèn)題?4、c+控制結(jié)構(gòu)。21 c+的輸入輸出i/o流控制 1. 用cout進(jìn)行輸出 2. 用cin進(jìn)行輸入22用const定義常變量 一般把程序中不允許改變值的變量定義為常變量. c中 #define pi 3.14159 實(shí)際只是在預(yù)編譯時(shí)進(jìn)行字符置換,pi不是變量,沒(méi)有類(lèi)型,不占用存儲(chǔ)單元,而且容易出錯(cuò). c+ const float pi=3.14159 常變量pi具有變量的屬性,有數(shù)據(jù)類(lèi)型,占用存儲(chǔ)單元,有地址,可用指針指向它. 舉例: int a=1

10、;b=2; #define pi 3.14159 #define r a+b coutpi*r*rendl; 輸出的并不是3.14159 *(a+b)*(a+b),而是3.14159 *a+b*a+b,23函數(shù)原型聲明、重載、模板及默認(rèn)參數(shù)函數(shù)、內(nèi)聯(lián)函數(shù) 在c+中,如果函數(shù)調(diào)用的位置在函數(shù)定義之前,則要求在函數(shù)調(diào)用之前必須對(duì)調(diào)用的函數(shù)作函數(shù)原型聲明(強(qiáng)制性). 下面兩種寫(xiě)法等價(jià) int max(int x,int y); int max(int ,int );/編譯時(shí)只檢查參數(shù)類(lèi)型,不檢查參數(shù)名. 函數(shù)的重載(一個(gè)函數(shù)名多用)是指c+允許在同一作用域(例如同一個(gè)文件模塊)中用同一函數(shù)名定義多個(gè)

11、函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類(lèi)型可以都不相同,也可實(shí)現(xiàn)功能不同. 例1.6 求3個(gè)數(shù)中的最大的數(shù)(分別考慮整數(shù)實(shí)數(shù)長(zhǎng)整數(shù)的情況) 例1.7用一個(gè)函數(shù)求2個(gè)整數(shù)或3個(gè)整數(shù)中的最大者. 注意: 重載函數(shù)的參數(shù)個(gè)數(shù)或類(lèi)型必須至少有其中之一不同,函數(shù)返回值類(lèi)型可以相同也可以不同.但不允許參數(shù)個(gè)數(shù)和類(lèi)型都相同而只有返回值不同,因?yàn)橄到y(tǒng)無(wú)法從函數(shù)的調(diào)用形式上判斷哪一個(gè)函數(shù)與之匹配. 重載函數(shù)的參數(shù)個(gè)數(shù)或類(lèi)型必須至少有其中之一不同,函數(shù)返回值類(lèi)型可以相同也可以不同.但不允許參數(shù)個(gè)數(shù)和類(lèi)型都相同而只有返回值不同,因?yàn)橄到y(tǒng)無(wú)法從函數(shù)的調(diào)用形式上判斷哪一個(gè)函數(shù)與之匹配. #include using names

12、pace std; int max(int a,int b,int c) /求3個(gè)整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; float max(float a,float b, float c) /求3個(gè)實(shí)數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; long max(long a,long b,long c) /求3個(gè)長(zhǎng)整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; int main( ) int a,b,c; float d,e,f; long g,h,i; cin

13、abc; cindef; cinghi; int m; m= max(a,b,c); /函數(shù)值為整型 cout max_i=mendl; float n; n=max(d,e,f); /函數(shù)值為實(shí)型 coutmax_f=nendl; long int p; p=max(g,h,i); /函數(shù)值為長(zhǎng)整型 coutmax_l=pendl; return 0; 例1.8 將例1.6中的程序改為通過(guò)函數(shù)模板來(lái)實(shí)現(xiàn). #include using namespace std; template t max(t a,t b,t c) /模板聲明,其中t為類(lèi)型參數(shù) if(ba) a=b; /定義一個(gè)通用函數(shù)

14、,用t用虛擬的類(lèi)型名 if(ca) a=c; return a; int main() int i1=8,i2=5,i3=6,i; double d1=56.9,d2=90.765,d3=43.1,d; long g1=67843,g2=-456,g3=78123,g; i=max(i1,i2,i3); /調(diào)用模板函數(shù),此時(shí)t被int取代 d=max(d1,d2,d3); /調(diào)用模板函數(shù),此時(shí)t被double取代 g=max(g1,g2,g3); /調(diào)用模板函數(shù),此時(shí)t被long取代 couti_max=iendl; coutd_max=dendl; coutg_max=gendl; retu

15、rn 0; 1.3.6有默認(rèn)參數(shù)的函數(shù) #include /例1.7此程序?yàn)椴捎貌粠J(rèn)參數(shù)的函數(shù) using namespace std; int max(int a,int b,int c) /求3個(gè)整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; int max(int a, int b) /求兩個(gè)整數(shù)中的最大者 if (ab) return a; else return b; int main( ) int a=7,b=-4,c=9; coutmax(a,b,c)endl; /輸出3個(gè)整數(shù)中的最大者 coutmax(a,b)endl; /輸出兩個(gè)整

16、數(shù)中的最大者 return 0; #include /習(xí)題1.11,此程序?yàn)椴捎脦J(rèn)參數(shù)的函數(shù) using namespace std; int main() int max(int a,int b,int c=0); int a,b,c; cinabc; coutmax(a,b,c)=max(a,b,c)endl; coutmax(a,b)=max(a,b)a) a=b; if(ca) a=c; return a; 注意: 實(shí)參與形參的結(jié)合是從左至右進(jìn)行的,指定默認(rèn)值的參數(shù)必須放在形參表列中的最右端. 最好在函數(shù)聲明時(shí)指定默認(rèn)值.(必須在函數(shù)調(diào)用之前將默認(rèn)值的信息通知編譯系統(tǒng)) 一個(gè)函數(shù)不

17、能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù).(二義性)24變量的引用、作用域運(yùn)算符和字符串變量1.3.7變量的引用(別名) 1. 引用的概念 變量的”引用”就是變量的別名,對(duì)一個(gè)變量的”引用”的所有操作,實(shí)際上都是對(duì)其所代表的(原來(lái)的)變量的操作. int a; int &b=a;/聲明b是一個(gè)整型變量的引用變量,它被初始化為a 注意:在上述聲明中&是”引用聲明符”,此時(shí)它并不代表地址. 對(duì)變量聲明一個(gè)引用,并不另開(kāi)辟內(nèi)存單元,b和a都代表同一變量單元.在聲明一個(gè)引用時(shí),必須同時(shí)使之初始化,即聲明它代表哪一個(gè)變量.2. 引用的簡(jiǎn)單使用 #include using namespace std;

18、int main( ) int a=10; int &b=a; /聲明b是a的引用 a=a*a; /a的值變化了,b的值也應(yīng)一起變化 couta bendl; b=b/5; /b的值變化了,a的值也應(yīng)一起變化 coutb aendl; return 0; 3. 關(guān)于引用的簡(jiǎn)單說(shuō)明 當(dāng)&a的前面有類(lèi)型符時(shí)(如int &a),它必然是對(duì)引用的聲明,如果前面沒(méi)有類(lèi)型符(如p=&a),此時(shí)的&是取地址運(yùn)算符.4. 將引用作為函數(shù)參數(shù) 1.將變量名作為實(shí)參. #include /例1.10無(wú)法實(shí)現(xiàn)兩個(gè)變量的值互換的程序 using namespace std; void swap(int a,int b

19、) int temp; temp=a; a=b; b=temp; /實(shí)現(xiàn)a和b的值互換 int main( ) int i=3,j=5; swap(i,j); couti,jendl; /i和j的值未互換 return 0; 2 傳遞變量的指針 /例1.11使用指針變量作形參,實(shí)現(xiàn)兩個(gè)變量的值互換 #include using namespace std; void swap(int *p1,int *p2) int temp; temp=*p1; *p1= *p2; *p2=temp; int main( ) int i=3,j=5; swap(&i,&j); couti,jendl; re

20、turn 0; 2.傳送變量的別名 例1.12利用”引用形參”實(shí)現(xiàn)兩個(gè)變量的值互換. #include using namespace std; void swap(int &a,int &b) int temp; temp=a; a=b; b=temp; int main( ) int i=3,j=5; swap(i,j); couti=i j=jendl; return 0; c+調(diào)用函數(shù)時(shí)有兩種傳遞數(shù)據(jù)的方式 1、傳值方式調(diào)用 2、引用方式調(diào)用 對(duì)比例1.12與例1.11,分析使用引用和使用指針變量用函數(shù)形參有什么不同? c+提供的引用機(jī)制是非常有用的,尤其用作函數(shù)參數(shù)時(shí),比用指針簡(jiǎn)單,

21、易于理解,而且可以減少出錯(cuò)機(jī)會(huì),提高程序的執(zhí)行效率,在許多情況下能代替指針.5. 對(duì)引用的進(jìn)一步說(shuō)明1.3.8內(nèi)置函數(shù) 調(diào)用函數(shù)需要一定的時(shí)間,如果有的函數(shù)需要頻繁使用,則累計(jì)所用時(shí)間會(huì)很長(zhǎng),從而降低程序的執(zhí)行效率.c+提供一種提高效率的方法,在編譯時(shí)將所調(diào)用函數(shù)的代碼嵌入到主函數(shù)中. 例1.13 #include using namespace std; inline int max(int a,int b,int c) /這是一個(gè)內(nèi)置函數(shù),求3個(gè)整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; int main( ) int i=7,j=10,k=25

22、,m; m=max(i,j,k); coutmax=mendl; return 0; 使用內(nèi)置函數(shù)可以節(jié)省運(yùn)行時(shí)間,但卻增加了目標(biāo)程序的長(zhǎng)度.因此只用于規(guī)模很小而使用頻繁的函數(shù).1.3.9作用域運(yùn)算符 每一個(gè)變量都有其有效的作用域,只能在變量的作用域內(nèi)使用該變量,不能直接使用其它作用域中的變量. 例子1.16 局部變量和全局變量同名 #include using namespace std; float a=13.5; int main( ) int a=5; coutaendl;/輸出局部變量a的值 cout:astring1; coutstring2;4. 字符串變量的運(yùn)算 在用字符組存放

23、字符串時(shí),字符串的運(yùn)算要用字符串函數(shù).如strcat(存放),strcmp(比較),strcpy(復(fù)制),而對(duì)string類(lèi)對(duì)象,可以不用這些函數(shù),直接用簡(jiǎn)單的運(yùn)算符.5. 字符串?dāng)?shù)組 string name5;/定義一字符串?dāng)?shù)組,它包含5個(gè)字符串元素 string name5=“zhang”,”li”,”fun”,”wang”,”tan”/定義一個(gè)字符串?dāng)?shù)組并初始化 編譯系統(tǒng)為每一個(gè)字符串變量分配固定的字節(jié)數(shù),在這個(gè)存儲(chǔ)單元中,并不是直接存放字符串本身,而是存放字符串的地址.例子1.17 輸入3個(gè)字符串,要求按字母由小到大順序輸出 #include #include using namesp

24、ace std; int main() string string1,string2,string3,temp; coutstring1string2string3; /輸入3個(gè)字符串 if(string2string3) temp=string2;string2=string3;string3=temp; /使串2串3 if(string1=string2) coutstring1 string2 string3endl; /如果串1串2,則串1串2串3 else if(string1=string3) coutstring2 string1 string3endl; /如果串1串2,且串1

25、串3,則串2串1串3 else coutstring2 string3 string1endl; /如果串1串2,且串1串3,則串2串3串3 return 0; 25動(dòng)態(tài)內(nèi)存分配/撤消new和delete運(yùn)算符1.3.11動(dòng)態(tài)分配/撤銷(xiāo)內(nèi)存的運(yùn)算符new和delete new int;/開(kāi)辟一個(gè)存放整數(shù)的空間,返回一個(gè)指向整型數(shù)據(jù)的指針 new int(100);/開(kāi)辟一個(gè)存放整數(shù)的空間,并指定該整數(shù)的初值為100 new char10;/開(kāi)辟一個(gè)存放字符數(shù)組的空間,該數(shù)組有10個(gè)元素,返回一個(gè)指向字符數(shù)組的指針 new int54;/開(kāi)辟一個(gè)存放二維整型數(shù)組的空間,該數(shù)組大小為5*4, fl

26、oat *p=new float(3.14159)/開(kāi)辟一個(gè)存放實(shí)數(shù)的空間,并指定該實(shí)數(shù)的初值為3.14159,將返回的指向?qū)嵭蛿?shù)據(jù)的指針賦給指針變量p例子1.18 開(kāi)辟空間以存放一個(gè)結(jié)構(gòu)體變量. #include #include using namespace std; struct student char name 10; int num; char sex; ; int main ( ) student *p; p=new student; strcpy(p-name,wang fun); p-num=10123; p-sex=m; coutname num sexendl; del

27、ete p; return 0; 如果由于內(nèi)存不足等原因而無(wú)法正常分配空間,則new會(huì)返回一個(gè)空指針null,用戶(hù)可以根據(jù)該指針的值判斷分配空間是否成功. 注意, new和delete是運(yùn)算符,不是函數(shù),因此執(zhí)行效率高. new和delete配合使用,不要混合使用.3.c+程序的編寫(xiě)和實(shí)現(xiàn)在課中通過(guò)截圖和示意圖來(lái)演示。六、作業(yè)第2章 類(lèi)和對(duì)象一、教學(xué)目的: 掌握聲明類(lèi)的方法,類(lèi)和類(lèi)的成員的概念以及定義對(duì)象的方法;初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程序;學(xué)習(xí)檢查和調(diào)試基于對(duì)象的程序。學(xué)時(shí)分配:9學(xué)時(shí)二、教學(xué)重點(diǎn):初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程序三、教學(xué)難點(diǎn): 初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程

28、序,學(xué)習(xí)檢查和調(diào)試基于對(duì)象的程序。四、教學(xué)方法:課題講授及實(shí)例演示,采用多媒體教學(xué)方法,利用powerpoint將本節(jié)課的關(guān)鍵內(nèi)容歸類(lèi),并通過(guò)internet收集相關(guān)的資料融入教學(xué)內(nèi)容中。五、教學(xué)過(guò)程設(shè)計(jì):(9學(xué)時(shí))1.面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.1 面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述 當(dāng)程序規(guī)模較大時(shí),編程者直接編寫(xiě)出一個(gè)面向過(guò)程的程序就會(huì)力不從心,c+就是為了解決編寫(xiě)大程序過(guò)程中的困難而產(chǎn)生的。2.1.1 什么是面向?qū)ο蟪绦蛟O(shè)計(jì) 面向?qū)ο蟪绦蛟O(shè)計(jì)的思路和人們?nèi)粘I钪刑幚韱?wèn)題的思路是相似的。 在自然界和社會(huì)生活中,一個(gè)復(fù)雜的事物總是由許多部分組成的,各部分之間有一定的聯(lián)系,協(xié)調(diào)發(fā)揮功用。相關(guān)概念 1

29、.對(duì)象 客觀世界中任何一個(gè)事物都可以看成一個(gè)對(duì)象(object)?;蛘哒f(shuō),客觀世界是由千千萬(wàn)萬(wàn)個(gè)對(duì)象組成的。 對(duì)象是構(gòu)成系統(tǒng)的基本單位。 班級(jí)對(duì)象: 班級(jí)的靜態(tài)特征,所屬的系和專(zhuān)業(yè)、班級(jí)的人數(shù),所在的教室等。這種靜態(tài)特征稱(chēng)為屬性; 班級(jí)的動(dòng)態(tài)特征,如學(xué)習(xí)、開(kāi)會(huì)、體育比賽等,這種動(dòng)態(tài)特征稱(chēng)為行為。 如果想從外部控制班級(jí)中學(xué)生的活動(dòng),可以從外界向班級(jí)發(fā)一個(gè)信息(如聽(tīng)到打鈴就下課等),一般稱(chēng)它為消息。 任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,一是屬性(attribute);二是行為(behavior),它能根據(jù)外界給的信息進(jìn)行相應(yīng)的操作。對(duì)象是由一組屬性和一組行為構(gòu)成的。 面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們

30、所熟悉的這種思路。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件系統(tǒng)時(shí),首要的問(wèn)題是確定該系統(tǒng)是由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。在c+中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼)這兩部分組成的。 調(diào)用對(duì)象中的函數(shù)就是向該對(duì)象傳送一個(gè)消息(message),要求該對(duì)象實(shí)現(xiàn)某一行為(功能)。 2、封裝與信息隱蔽 我們可以對(duì)一個(gè)對(duì)象進(jìn)行封裝處理,把它的一部分屬性和功能對(duì)外界屏蔽,也就是說(shuō)從外界是看不到的、甚至是不可知的。 使用對(duì)象的人完全可以不必知道對(duì)象內(nèi)部的具體細(xì)節(jié),只需了解其外部功能即可自如地操作對(duì)象。 把對(duì)象的內(nèi)部實(shí)現(xiàn)和外部行為分隔開(kāi)來(lái)。 數(shù)據(jù)封裝將對(duì)象內(nèi)部的信息進(jìn)行屏蔽,人們只能通過(guò)對(duì)象界面

31、上的容許操作對(duì)對(duì)象進(jìn)行動(dòng)作,改變對(duì)象的屬性及狀態(tài)。 信息隱蔽是指對(duì)象中的某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界消息。它還有利于數(shù)據(jù)安全,防止無(wú)關(guān)的人了解和修改數(shù)據(jù)。 c+的對(duì)象中的函數(shù)名就是對(duì)象對(duì)外接口。3、抽象 抽象的過(guò)程是將有關(guān)事物的共性歸納、集中的過(guò)程。 抽象的作用是表示同一類(lèi)事物的本質(zhì)。 對(duì)象是具體存在的。類(lèi)是對(duì)象的抽象,而對(duì)象則是類(lèi)的實(shí)例,或者說(shuō)是類(lèi)的具體表現(xiàn)形式。類(lèi) 類(lèi)是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對(duì)象的集合。 類(lèi)的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。 類(lèi)定義可以視為一個(gè)具有類(lèi)似特性與共同行為的對(duì)象的模板,可用來(lái)產(chǎn)生對(duì)象。對(duì)象實(shí)例

32、 在一個(gè)類(lèi)中,每個(gè)對(duì)象都是類(lèi)的實(shí)例 (instance),它們都可使用類(lèi)中提供的函數(shù)。 對(duì)象的狀態(tài)則包含在它的實(shí)例變量,即實(shí)例的屬性中。4、繼承與重用面向?qū)ο蟮某绦蚪M成:對(duì)象 = 算法 數(shù)據(jù)結(jié)構(gòu)程序=(對(duì)象+對(duì)象+對(duì)象+)+ 消息 消息的作用就是對(duì)對(duì)象的控制。程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象以及確定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相應(yīng)的操作。 11什么是面向?qū)ο蟪绦蛟O(shè)計(jì)及特點(diǎn)12類(lèi)和對(duì)象的作用2.類(lèi)和對(duì)象21類(lèi)的定義類(lèi)的聲明格式:class 類(lèi)名 private : 成員數(shù)據(jù);成員函數(shù); public : 成員數(shù)據(jù);成員函數(shù); protected:成員數(shù)據(jù);成員函數(shù);;用關(guān)鍵字private

33、限定的成員稱(chēng)為私有成員,對(duì)私有成員限定在該類(lèi)的內(nèi)部使用,即只允許該類(lèi)中的成員函數(shù)使用私有的成員數(shù)據(jù),對(duì)于私有的成員函數(shù),只能被該類(lèi)內(nèi)的成員函數(shù)調(diào)用;類(lèi)就相當(dāng)于私有成員的作用域。 而用關(guān)鍵字protected所限定的成員稱(chēng)為受保護(hù)成員,只允許在類(lèi)內(nèi)及該類(lèi)的派生類(lèi)中使用受保護(hù)的數(shù)據(jù)或函數(shù)。即受保護(hù)成員的作用域是該類(lèi)及該類(lèi)的派生類(lèi)。用關(guān)鍵字public限定的成員稱(chēng)為公用成員,公用成員的數(shù)據(jù)或函數(shù)不受類(lèi)的限制,可以在類(lèi)內(nèi)或類(lèi)外自由使用;對(duì)類(lèi)而言是透明的。每一個(gè)限制詞(private等)在類(lèi)體中可使用多次,即一個(gè)類(lèi)體中可以包含多個(gè)private和public部分。一旦使用了限制詞,該限制詞一直有效,直到

34、下一個(gè)限制詞開(kāi)始為止。但為了程序清晰,養(yǎng)成這樣的習(xí)慣:使每一種成員訪問(wèn)限定符在類(lèi)定義體中只出現(xiàn)一次。如果未加說(shuō)明,類(lèi)中成員默認(rèn)的訪問(wèn)權(quán)限是private,即私有的。class studentchar name20;float math;float chiese; public :float average; void setname(char *name);void setmath(float math);void setchinese(float ch); float getaverage(void);class a float x, y; public: void setxy(float

35、a,float b) x=a; y=b; void print(void) coutxtyendl; ;在類(lèi)外不能直接使用 x 或 y ,必須通過(guò)setxy()給 x 或 y 賦值,通過(guò)print()輸出 x 或 y 。成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說(shuō)明函數(shù)原型,再在類(lèi)體外定義函數(shù)體。class a float x, y; public: void setxy(float a,float b) x=a; y=b; void print(void) coutxtyendl; ;class a float x, y; public: void setxy(float a,float b)

36、; void print(void);;void a:setxy(float a,float b) x=a; y=b; void a:print(void) coutxtyendl; 在定義一個(gè)類(lèi)時(shí),要注意如下幾點(diǎn):1、類(lèi)具有封裝性,并且類(lèi)只是定義了一種結(jié)構(gòu)(樣板),所以類(lèi)中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字extern,auto或register限定其存儲(chǔ)類(lèi)型。2、在定義類(lèi)時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類(lèi)型,并不為類(lèi)分配存儲(chǔ)空間,所以,在定義類(lèi)中的數(shù)據(jù)成員時(shí),不能對(duì)其初始化。如:class test int x=5,y=6; /是不允許的 extern float x; /是不允許的 在c+語(yǔ)言中

37、,結(jié)構(gòu)體類(lèi)型只是類(lèi)的一個(gè)特例。結(jié)構(gòu)體類(lèi)型與類(lèi)的唯一的區(qū)別在于:在類(lèi)中,其成員的缺省的存取權(quán)限是私有的;而在結(jié)構(gòu)體類(lèi)型中,其成員的缺省的存取權(quán)限是公有的。 內(nèi)聯(lián)成員函數(shù) 對(duì)象在定義類(lèi)時(shí),只是定義了一種數(shù)據(jù)類(lèi)型,即說(shuō)明程序中可能會(huì)出現(xiàn)該類(lèi)型的數(shù)據(jù),并不為類(lèi)分配存儲(chǔ)空間。只有在定義了屬于類(lèi)的變量后,系統(tǒng)才會(huì)為類(lèi)的變量分配空間。類(lèi)的變量我們稱(chēng)之為。22成員函數(shù):成員函數(shù)定義;使用對(duì)象指針;常成員函數(shù);重載成員函數(shù)對(duì)象是類(lèi)的實(shí)例,定義對(duì)象之前,一定要先說(shuō)明該對(duì)象的類(lèi)。不同對(duì)象占據(jù)內(nèi)存中的不同區(qū)域,它們所保存的數(shù)據(jù)各不相同,但對(duì)成員數(shù)據(jù)進(jìn)行操作的成員函數(shù)的程序代碼均是一樣的。 在建立對(duì)象時(shí),只為對(duì)象分配用

38、于保存數(shù)據(jù)成員的內(nèi)存空間,而成員函數(shù)的代碼為該類(lèi)的每一個(gè)對(duì)象所共享。 對(duì)象的定義方法同結(jié)構(gòu)體定義變量的方法一樣,也分三種,當(dāng)類(lèi)中有數(shù)據(jù)成員的訪問(wèn)權(quán)限為私有時(shí),不允許對(duì)對(duì)象進(jìn)行初始化。class a float x,y;public: void setxy( float a, float b ) x=a; y=b; void print(void) coutxtyendl; a1,a2;void main(void) a a3,a4;對(duì)象的使用一個(gè)對(duì)象的成員就是該對(duì)象的類(lèi)所定義的成員,有成員數(shù)據(jù)和成員函數(shù),引用時(shí)同結(jié)構(gòu)體變量類(lèi)似,用“.”運(yùn)算符。class a float x,y;public:

39、 float m,n; void setxy( float a, float b ) x=a; y=b; void print(void) coutxtyendl; ;void main(void) a a1,a2; /定義對(duì)象 a1.m=10; a1.n=20; /為公有成員數(shù)據(jù)賦值 a1.setxy(2.0 , 5.0); /為私有成員數(shù)據(jù)賦值 a1.print();用成員選擇運(yùn)算符“.”只能訪問(wèn)對(duì)象的公有成員,而不能訪問(wèn)對(duì)象的私有成員或保護(hù)成員。若要訪問(wèn)對(duì)象的私有的數(shù)據(jù)成員,只能通過(guò)對(duì)象的公有成員函數(shù)來(lái)獲取。 23程序結(jié)構(gòu):訪問(wèn)控制;類(lèi)的程序結(jié)構(gòu);類(lèi)作用域3.類(lèi)的封裝性和信息隱蔽六、作業(yè)

40、第3章 關(guān)于類(lèi)和對(duì)象的進(jìn)一步討論一、教學(xué)目的: 進(jìn)一步加深對(duì)類(lèi)和對(duì)象的理解;掌握類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法。掌握對(duì)對(duì)象數(shù)組、對(duì)象的指針及其使用方法;掌握友元的概念和使用;了解類(lèi)模板的使用方法。學(xué)時(shí)分配:10學(xué)時(shí)二、教學(xué)重點(diǎn):掌握類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法三、教學(xué)難點(diǎn):理解和掌握對(duì)象數(shù)組、對(duì)象的指針及其使用方法四、教學(xué)方法:課題講授及例程解析,采用多媒體教學(xué)方法,利用powerpoint將本節(jié)課的關(guān)鍵內(nèi)容歸類(lèi),并通過(guò)internet收集相關(guān)的資料融入教學(xué)內(nèi)容中。五、教學(xué)過(guò)程設(shè)計(jì):1. 構(gòu)造函數(shù)和析構(gòu)函數(shù)及調(diào)用順序11構(gòu)造函數(shù)設(shè)計(jì),構(gòu)造函數(shù)的重載 ,類(lèi)成員初始化,構(gòu)造順序,

41、復(fù)制構(gòu)造函數(shù)對(duì)象數(shù)組、對(duì)象的指針及其使用方法構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類(lèi)體中說(shuō)明的兩種特殊的成員函數(shù)。構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí),使用給定的值來(lái)將對(duì)象初始化。析構(gòu)函數(shù)的功能正好相反,是在系統(tǒng)釋放對(duì)象前,對(duì)對(duì)象做一些善后工作。構(gòu)造函數(shù)可以帶參數(shù)、可以重載,同時(shí)沒(méi)有返回值。構(gòu)造函數(shù)是類(lèi)的成員函數(shù),系統(tǒng)約定構(gòu)造函數(shù)名必須與類(lèi)名相同。構(gòu)造函數(shù)提供了初始化對(duì)象的一種簡(jiǎn)單的方法。class afloat x,y;public:a(float a,float b) x=a; y=b;/構(gòu)造函數(shù),初始化對(duì)象float sum(void) return x+y; void set(float a,float b) x=

42、a;y=b;print(void) coutx=xty=yendl;void main(void)a a1(2.0, 3.0);/定義時(shí)調(diào)用構(gòu)造函數(shù)初始化a a2(1.0,2.0);a2.set(10.0, 20.0); /利用成員函數(shù)重新為對(duì)象賦值 a1.print();a2.print();對(duì)構(gòu)造函數(shù),說(shuō)明以下幾點(diǎn):1.構(gòu)造函數(shù)的函數(shù)名必須與類(lèi)名相同。構(gòu)造函數(shù)的主要作用是完成初始化對(duì)象的數(shù)據(jù)成員以及其它的初始化工作。2. 在定義構(gòu)造函數(shù)時(shí),不能指定函數(shù)返回值的類(lèi)型,也不能指定為void類(lèi)型。3. 一個(gè)類(lèi)可以定義若干個(gè)構(gòu)造函數(shù)。當(dāng)定義多個(gè)構(gòu)造函數(shù)時(shí),必須滿足函數(shù)重載的原則。4.構(gòu)造函數(shù)可以指定參數(shù)的缺省值。 5.若定義的類(lèi)要說(shuō)明該類(lèi)的對(duì)象時(shí),構(gòu)造函數(shù)必須是公有的成員函數(shù)。如果定義的類(lèi)僅用于派生其它類(lèi)時(shí),則可將構(gòu)造函數(shù)定義為保護(hù)的成員函數(shù)。由于構(gòu)造函數(shù)屬于類(lèi)的成員函數(shù),它對(duì)私

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論