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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、值非真即假。在c+語言中,用非0代表真,用0表示假。關(guān)系表達(dá)式的結(jié)果只有兩個,真為1,假為0。 3.語句coutab,c“a”; 有什么問題?4、c+控制結(jié)構(gòu)。21 c+的輸入輸出i/o流控制 1. 用cout進(jìn)行輸出 2. 用cin進(jìn)行輸入22用const定義常變量 一般把程序中不允許改變值的變量定義為常變量. c中 #define pi 3.14159 實際只是在預(yù)編譯時進(jìn)行字符置換,pi不是變量,沒有類型,不占用存儲單元,而且容易出錯. c+ const float pi=3.14159 常變量pi具有變量的屬性,有數(shù)據(jù)類型,占用存儲單元,有地址,可用指針指向它. 舉例: 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)用之前必須對調(diào)用的函數(shù)作函數(shù)原型聲明(強制性). 下面兩種寫法等價 int max(int x,int y); int max(int ,int );/編譯時只檢查參數(shù)類型,不檢查參數(shù)名. 函數(shù)的重載(一個函數(shù)名多用)是指c+允許在同一作用域(例如同一個文件模塊)中用同一函數(shù)名定義多個

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

12、pace std; int max(int a,int b,int c) /求3個整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; float max(float a,float b, float c) /求3個實數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; long max(long a,long b,long c) /求3個長整數(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ù)值為實型 coutmax_f=nendl; long int p; p=max(g,h,i); /函數(shù)值為長整型 coutmax_l=pendl; return 0; 例1.8 將例1.6中的程序改為通過函數(shù)模板來實現(xiàn). #include using namespace std; template t max(t a,t b,t c) /模板聲明,其中t為類型參數(shù) if(ba) a=b; /定義一個通用函數(shù)

14、,用t用虛擬的類型名 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ù),此時t被int取代 d=max(d1,d2,d3); /調(diào)用模板函數(shù),此時t被double取代 g=max(g1,g2,g3); /調(diào)用模板函數(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此程序為采用不帶默認(rèn)參數(shù)的函數(shù) using namespace std; int max(int a,int b,int c) /求3個整數(shù)中的最大者 if (ba) a=b; if (ca) a=c; return a; int max(int a, int b) /求兩個整數(shù)中的最大者 if (ab) return a; else return b; int main( ) int a=7,b=-4,c=9; coutmax(a,b,c)endl; /輸出3個整數(shù)中的最大者 coutmax(a,b)endl; /輸出兩個整

16、數(shù)中的最大者 return 0; #include /習(xí)題1.11,此程序為采用帶默認(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; 注意: 實參與形參的結(jié)合是從左至右進(jìn)行的,指定默認(rèn)值的參數(shù)必須放在形參表列中的最右端. 最好在函數(shù)聲明時指定默認(rèn)值.(必須在函數(shù)調(diào)用之前將默認(rèn)值的信息通知編譯系統(tǒng)) 一個函數(shù)不

17、能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù).(二義性)24變量的引用、作用域運算符和字符串變量1.3.7變量的引用(別名) 1. 引用的概念 變量的”引用”就是變量的別名,對一個變量的”引用”的所有操作,實際上都是對其所代表的(原來的)變量的操作. int a; int &b=a;/聲明b是一個整型變量的引用變量,它被初始化為a 注意:在上述聲明中&是”引用聲明符”,此時它并不代表地址. 對變量聲明一個引用,并不另開辟內(nèi)存單元,b和a都代表同一變量單元.在聲明一個引用時,必須同時使之初始化,即聲明它代表哪一個變量.2. 引用的簡單使用 #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)于引用的簡單說明 當(dāng)&a的前面有類型符時(如int &a),它必然是對引用的聲明,如果前面沒有類型符(如p=&a),此時的&是取地址運算符.4. 將引用作為函數(shù)參數(shù) 1.將變量名作為實參. #include /例1.10無法實現(xiàn)兩個變量的值互換的程序 using namespace std; void swap(int a,int b

19、) int temp; temp=a; a=b; b=temp; /實現(xiàn)a和b的值互換 int main( ) int i=3,j=5; swap(i,j); couti,jendl; /i和j的值未互換 return 0; 2 傳遞變量的指針 /例1.11使用指針變量作形參,實現(xiàn)兩個變量的值互換 #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利用”引用形參”實現(xiàn)兩個變量的值互換. #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ù)據(jù)的方式 1、傳值方式調(diào)用 2、引用方式調(diào)用 對比例1.12與例1.11,分析使用引用和使用指針變量用函數(shù)形參有什么不同? c+提供的引用機制是非常有用的,尤其用作函數(shù)參數(shù)時,比用指針簡單,

21、易于理解,而且可以減少出錯機會,提高程序的執(zhí)行效率,在許多情況下能代替指針.5. 對引用的進(jìn)一步說明1.3.8內(nèi)置函數(shù) 調(diào)用函數(shù)需要一定的時間,如果有的函數(shù)需要頻繁使用,則累計所用時間會很長,從而降低程序的執(zhí)行效率.c+提供一種提高效率的方法,在編譯時將所調(diào)用函數(shù)的代碼嵌入到主函數(shù)中. 例1.13 #include using namespace std; inline int max(int a,int b,int c) /這是一個內(nèi)置函數(shù),求3個整數(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é)省運行時間,但卻增加了目標(biāo)程序的長度.因此只用于規(guī)模很小而使用頻繁的函數(shù).1.3.9作用域運算符 每一個變量都有其有效的作用域,只能在變量的作用域內(nèi)使用該變量,不能直接使用其它作用域中的變量. 例子1.16 局部變量和全局變量同名 #include using namespace std; float a=13.5; int main( ) int a=5; coutaendl;/輸出局部變量a的值 cout:astring1; coutstring2;4. 字符串變量的運算 在用字符組存放

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

24、ace std; int main() string string1,string2,string3,temp; coutstring1string2string3; /輸入3個字符串 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動態(tài)內(nèi)存分配/撤消new和delete運算符1.3.11動態(tài)分配/撤銷內(nèi)存的運算符new和delete new int;/開辟一個存放整數(shù)的空間,返回一個指向整型數(shù)據(jù)的指針 new int(100);/開辟一個存放整數(shù)的空間,并指定該整數(shù)的初值為100 new char10;/開辟一個存放字符數(shù)組的空間,該數(shù)組有10個元素,返回一個指向字符數(shù)組的指針 new int54;/開辟一個存放二維整型數(shù)組的空間,該數(shù)組大小為5*4, fl

26、oat *p=new float(3.14159)/開辟一個存放實數(shù)的空間,并指定該實數(shù)的初值為3.14159,將返回的指向?qū)嵭蛿?shù)據(jù)的指針賦給指針變量p例子1.18 開辟空間以存放一個結(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)存不足等原因而無法正常分配空間,則new會返回一個空指針null,用戶可以根據(jù)該指針的值判斷分配空間是否成功. 注意, new和delete是運算符,不是函數(shù),因此執(zhí)行效率高. new和delete配合使用,不要混合使用.3.c+程序的編寫和實現(xiàn)在課中通過截圖和示意圖來演示。六、作業(yè)第2章 類和對象一、教學(xué)目的: 掌握聲明類的方法,類和類的成員的概念以及定義對象的方法;初步掌握用類和對象編制基于對象的程序;學(xué)習(xí)檢查和調(diào)試基于對象的程序。學(xué)時分配:9學(xué)時二、教學(xué)重點:初步掌握用類和對象編制基于對象的程序三、教學(xué)難點: 初步掌握用類和對象編制基于對象的程

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

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

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

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

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

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

34、下一個限制詞開始為止。但為了程序清晰,養(yǎng)成這樣的習(xí)慣:使每一種成員訪問限定符在類定義體中只出現(xiàn)一次。如果未加說明,類中成員默認(rè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; ;在類外不能直接使用 x 或 y ,必須通過setxy()給 x 或 y 賦值,通過print()輸出 x 或 y 。成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說明函數(shù)原型,再在類體外定義函數(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; 在定義一個類時,要注意如下幾點:1、類具有封裝性,并且類只是定義了一種結(jié)構(gòu)(樣板),所以類中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字extern,auto或register限定其存儲類型。2、在定義類時,只是定義了一種導(dǎo)出的數(shù)據(jù)類型,并不為類分配存儲空間,所以,在定義類中的數(shù)據(jù)成員時,不能對其初始化。如:class test int x=5,y=6; /是不允許的 extern float x; /是不允許的 在c+語言中

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

38、于保存數(shù)據(jù)成員的內(nèi)存空間,而成員函數(shù)的代碼為該類的每一個對象所共享。 對象的定義方法同結(jié)構(gòu)體定義變量的方法一樣,也分三種,當(dāng)類中有數(shù)據(jù)成員的訪問權(quán)限為私有時,不允許對對象進(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;對象的使用一個對象的成員就是該對象的類所定義的成員,有成員數(shù)據(jù)和成員函數(shù),引用時同結(jié)構(gòu)體變量類似,用“.”運算符。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; /定義對象 a1.m=10; a1.n=20; /為公有成員數(shù)據(jù)賦值 a1.setxy(2.0 , 5.0); /為私有成員數(shù)據(jù)賦值 a1.print();用成員選擇運算符“.”只能訪問對象的公有成員,而不能訪問對象的私有成員或保護(hù)成員。若要訪問對象的私有的數(shù)據(jù)成員,只能通過對象的公有成員函數(shù)來獲取。 23程序結(jié)構(gòu):訪問控制;類的程序結(jié)構(gòu);類作用域3.類的封裝性和信息隱蔽六、作業(yè)

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

41、復(fù)制構(gòu)造函數(shù)對象數(shù)組、對象的指針及其使用方法構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類體中說明的兩種特殊的成員函數(shù)。構(gòu)造函數(shù)是在創(chuàng)建對象時,使用給定的值來將對象初始化。析構(gòu)函數(shù)的功能正好相反,是在系統(tǒng)釋放對象前,對對象做一些善后工作。構(gòu)造函數(shù)可以帶參數(shù)、可以重載,同時沒有返回值。構(gòu)造函數(shù)是類的成員函數(shù),系統(tǒng)約定構(gòu)造函數(shù)名必須與類名相同。構(gòu)造函數(shù)提供了初始化對象的一種簡單的方法。class afloat x,y;public:a(float a,float b) x=a; y=b;/構(gòu)造函數(shù),初始化對象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);/定義時調(diào)用構(gòu)造函數(shù)初始化a a2(1.0,2.0);a2.set(10.0, 20.0); /利用成員函數(shù)重新為對象賦值 a1.print();a2.print();對構(gòu)造函數(shù),說明以下幾點:1.構(gòu)造函數(shù)的函數(shù)名必須與類名相同。構(gòu)造函數(shù)的主要作用是完成初始化對象的數(shù)據(jù)成員以及其它的初始化工作。2. 在定義構(gòu)造函數(shù)時,不能指定函數(shù)返回值的類型,也不能指定為void類型。3. 一個類可以定義若干個構(gòu)造函數(shù)。當(dāng)定義多個構(gòu)造函數(shù)時,必須滿足函數(shù)重載的原則。4.構(gòu)造函數(shù)可以指定參數(shù)的缺省值。 5.若定義的類要說明該類的對象時,構(gòu)造函數(shù)必須是公有的成員函數(shù)。如果定義的類僅用于派生其它類時,則可將構(gòu)造函數(shù)定義為保護(hù)的成員函數(shù)。由于構(gòu)造函數(shù)屬于類的成員函數(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論