技能知識(shí)培訓(xùn)三_第1頁
技能知識(shí)培訓(xùn)三_第2頁
技能知識(shí)培訓(xùn)三_第3頁
技能知識(shí)培訓(xùn)三_第4頁
技能知識(shí)培訓(xùn)三_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、技能知識(shí)培訓(xùn)三C+面向?qū)ο蟪绦蛟O(shè)計(jì)Page *目錄指針與引用比較函數(shù)重載函數(shù)指針鏈表面向?qū)ο笤O(shè)計(jì)思想類和對象Page *指針與引用比較指針與引用都是間接引用其他對象。首先,要認(rèn)識(shí)到在任何情況下都不能使用指向空值的引用。一個(gè)引用必須總是指向某些對象。因此如果你使用一個(gè)變量并讓它指向一個(gè)對象,但是該變量在某些時(shí)候也可能不指向任何對象,這時(shí)你應(yīng)該把變量聲明為指針,因?yàn)檫@樣你可以賦空值給該變量。相反,如果變量肯定指向一個(gè)對象,例如你的設(shè)計(jì)不允許變量為空,這時(shí)你就可以把變量聲明為引用。 Page *指針與引用比較char *pc = 0; / 設(shè)置指針為空值char& rc = *pc; / 讓引用指向

2、空值這是非常有害的,毫無疑問。結(jié)果將是不確定的(編譯器能產(chǎn)生一些輸出,導(dǎo)致任何事情都有可能發(fā)生)。 Page *指針與引用比較引用必須初始化string& rs; / 錯(cuò)誤,引用必須被初始化string s(xyzzy);string& rs = s; / 正確,rs指向s指針沒有這樣的限制。string *ps; / 未初始化的指針/ 合法但危險(xiǎn)Page *指針與引用比較不存在指向空值的引用這個(gè)事實(shí)意味著使用引用的代碼效率比使用指針的要高。因?yàn)樵谑褂靡弥安恍枰獪y試它的合法性。void printDouble(const double& rd)cout rd; / 不需要測試rd,它 /

3、肯定指向一個(gè)double值相反,指針則應(yīng)該總是被測試,防止其為空:void printDouble(const double *pd)if (pd) / 檢查是否為NULLcout *pd;Page *指針與引用比較指針與引用的另一個(gè)重要的不同是指針可以被重新賦值以指向另一個(gè)不同的對象。但是引用則總是指向在初始化時(shí)被指定的對象,以后不能改變。string s1(Nancy);string s2(Clancy);string& rs = s1; / rs 引用 s1string *ps = &s1; / ps 指向 s1rs = s2; / rs 仍舊引用s1,/ 但是 s1的值現(xiàn)在是/ Cla

4、ncyps = &s2; / ps 現(xiàn)在指向 s2;/ s1 沒有改變Page *指針與引用比較總的來說,在以下情況下你應(yīng)該使用指針,一是你考慮到存在不指向任何對象的可能(在這種情況下,你能夠設(shè)置指針為空),二是你需要能夠在不同的時(shí)刻指向不同的對象(在這種情況下,你能改變指針的指向)。如果總是指向一個(gè)對象并且一旦指向一個(gè)對象后就不會(huì)改變指向,那么你應(yīng)該使用引用。還有一種情況,就是當(dāng)你重載某個(gè)操作符時(shí),你應(yīng)該使用引用。最普通的例子是操作符。這個(gè)操作符典型的用法是返回一個(gè)目標(biāo)對象,其能被賦值。vector v(10); / 建立整形向量(vector),大小為10;v5 = 10; / 這個(gè)被賦值

5、的目標(biāo)對象就是操作符返回的值如果操作符返回一個(gè)指針,那么后一個(gè)語句就得這樣寫:*v5 = 10;但是這樣會(huì)使得v看上去象是一個(gè)向量指針。因此你會(huì)選擇讓操作符返回一個(gè)引用。當(dāng)你知道你必須指向一個(gè)對象并且不想改變其指向時(shí),或者在重載操作符并為防止不必要的語義誤解時(shí),你不應(yīng)該使用指針。而在除此之外的其他情況下,則應(yīng)使用指針 Page *函數(shù)類別內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù):內(nèi)部函數(shù)時(shí)是在定義它的文件中可以被調(diào)用的函數(shù),而在同一程序的其他文件中不可調(diào)用,定義內(nèi)部函數(shù)的格式如下:static 類型說明 函數(shù)名(參數(shù)表)函數(shù)體; Page *函數(shù)類別外部函數(shù):外部函數(shù)是作用域在整個(gè)程序中的函數(shù),包含組成該程

6、序的若干個(gè)文件。外部函數(shù)的定義格式如下:extern 類型說明 函數(shù)名(參數(shù)表)Page *函數(shù)重載所謂重載就是賦給同一個(gè)函數(shù)名不同的含義。 具體的講,c+中允許在相同的作用域內(nèi)以相同的名字定義幾個(gè)不同實(shí)現(xiàn)的函數(shù),可以是類成員函數(shù),也可以是普通的函數(shù)。但是,定義重載函數(shù)時(shí)要求同名函數(shù)的參數(shù)至少有一個(gè)類型不同,或者個(gè)數(shù)不同,否則會(huì)造成二義性。而對返回值沒有要求。Page *函數(shù)指針定義方式數(shù)據(jù)類型 (*函數(shù)名)(參數(shù)列表);應(yīng)用(小學(xué)生四則混合運(yùn)算綜合程序設(shè)計(jì)):要求:一張?jiān)嚲戆李}目題目隨機(jī)產(chǎn)生考生做完后可以查看得分int add(int left,int right)return lef

7、t+right;int sub(int left,int right)return left+right;Page *函數(shù)指針int multiply(int left,int right)return left*right;int divide(int left,int right)if(right = 0)return -1;return left/right;Page *函數(shù)指針struct Topicint left;char op;int right;int result;int key;bool flag;struct Paperint num;Topic* topics;char

8、 name15;int score;Page *函數(shù)指針Paper* createPaper(char* name)Paper* paper=new Paper;strcpy(paper-name,name);paper-topics=new Topic10;paper-num = 10;char op4=+,-,*,/;for(int i=0;itopicsi.left=left;paper-topicsi.right=right;paper-topicsi.op=opwhichop;return paper;Page *函數(shù)指針int getResult(int left,int righ

9、t,char op)int (*fun)(int,int);switch(op)case +:fun=add;break;case -:fun=sub;break;case *:fun=multiply;break;case /:fun=divide;break;default:break;return fun(left,right);Page *函數(shù)指針void testSystem三cout*小學(xué)生四則混合運(yùn)算;cout*endl;char name15=0;coutname;Paper* paper=createPaper(name);int count=0;for(int i=0;in

10、um;+i)int result; couttopicsi.lefttopicsi.optopicsi.rightresult; paper-topicsi.result = result;paper-topicsi.key=getResult(paper-topicsi.left,paper-topicsi.right,paper-topicsi.op);if(result = paper-topicsi.key) paper-topicsi.flag=true; +count; else paper-topicsi.flag=false; paper-score = count*100/p

11、aper-num;cout恭喜您得了score分data = a0;head-next=NULL;link* tmp=head;for(int i=1;idata = ai;newnode-next = NULL;tmp-next=newnode;tmp=newnode;return head; Page *單向鏈表的實(shí)現(xiàn)void print(link* head)while(head != NULL)coutdatanext;void main三link* head=createSingleLink三;print(head);Page *雙向表雙向鏈表結(jié)點(diǎn)定義struct linkint d

12、ata;/數(shù)據(jù)域link* prev;/指針域link* next;/指針域;Page *雙向表應(yīng)用舉例:有15個(gè)人圍成一圈,輪流按1,2,3報(bào)數(shù),報(bào)到3的人退出圈子。下一個(gè)人報(bào)1,問最后一個(gè)人是誰?Page *雙向表#define N 15int a15=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;char ch15=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;struct linkint data;/數(shù)據(jù)域link* prev;/指針域link* next;/指針域;Page *雙向表link* createDleLink三link* head=

13、new link;head-prev=head-next=NULL;head-data=a0;link* tmp=head;for(int i=1;idata=ai;newnode-next=NULL;newnode-prev=tmp;tmp-next=newnode;tmp=newnode;tmp-next = head;head-prev=tmp;return head;Page *int getLast(link* phead)int count=N;int step=3;int seq=1;link* head=phead;while(count1)if(seq = step)link

14、* tmp=head-next;head-prev-next=head-next;head-next-prev=head-prev;delete head;head=tmp;seq=1;-count;elsehead=head-next;+seq;return head-data;Page *雙向表void app三link* head=createDleLink三;coutchgetLast(head)endl;void main三app三;Page *面向?qū)ο蟪绦蛟O(shè)計(jì)思想從現(xiàn)實(shí)世界中客觀存在的事物(對象)出發(fā)來構(gòu)造系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能地運(yùn)用人類的自然思維方式。Page *以面向?qū)ο笏?/p>

15、想構(gòu)造軟件系統(tǒng)的主要內(nèi)容1、對象是以面向?qū)ο蠓椒?gòu)造的系統(tǒng)的基 本單位。對象是對問題域中客觀存在的事物的抽象。2、對象的屬性和操作組成一個(gè)完整的對象, 對象具有一定的對外接口,外界對象可以通過該接口來訪問對象。3、以對象為基礎(chǔ),對對象分類,將具有共同特性的對象進(jìn)行抽象,形成對這些對象的抽象描述類,每個(gè)對象就是該類的一個(gè)實(shí)例。Page *4、對形成的對象類進(jìn)一步抽象,抽出這些類的共同特征,形成基本的類和派生的類,派生的類又可以具有更多的派生類,這樣就形成一個(gè)類簇?;绢惡团缮惖年P(guān)系稱為繼承。5、一個(gè)系統(tǒng)就是由各個(gè)對象組成,對象和 對象之間存在靜態(tài)關(guān)系和動(dòng)態(tài)關(guān)系。 靜態(tài)關(guān)系體現(xiàn)了對象之間固有的關(guān)

16、系; 動(dòng)態(tài)關(guān)系是對象之間通過發(fā)送消息進(jìn)行 通信,相互協(xié)作,完成系統(tǒng)功能。Page *面向?qū)ο蟪绦蚍椒嫦驅(qū)ο蠓椒ㄊ抢贸橄?、封裝等機(jī)制,借助于對象、類、繼承、消息傳遞等概念進(jìn)行軟件系統(tǒng)構(gòu)造的軟件開發(fā)方法。Page *面向?qū)ο蠓椒ǖ男纬?、面向?qū)ο蟪绦蛟O(shè)計(jì)語言的三階段發(fā)生發(fā)展成熟Page *面向?qū)ο蠓椒ǖ男纬?、Smalltalk語言 Smalltalk是第一個(gè)完善的、實(shí)用的純面向?qū)ο蟮恼Z言。它有三個(gè)特點(diǎn):(1)將任何東西都看成對象,包括類本身。對對象的方法的調(diào)用在Smalltalk中稱為發(fā)送消息給對象。Page *Smalltalk語言(2)不進(jìn)行任何類型檢查操作,強(qiáng)調(diào)多態(tài)性和動(dòng)態(tài)連接。(3)

17、 Smalltalk不僅是一種語言,它還是一個(gè)具有類庫支持和交互式圖形擁護(hù)界面的完整的程序設(shè)計(jì)環(huán)境。Page *面向?qū)ο蟪绦蛟O(shè)計(jì)語言的分類(1)純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)語言 完全依照面向?qū)ο笏枷攵O(shè)計(jì)的,它的所有語言成分都以對象為核心。 如:Smalltalk、Eiffel、Actor和JAVA等Page *面向?qū)ο蟪绦蛟O(shè)計(jì)語言的分類(2)混合的面向?qū)ο蟪绦蛟O(shè)計(jì)語言 在某種已經(jīng)被廣泛使用的其他語言的基礎(chǔ)上增加了支持面向?qū)ο笏枷氲恼Z言成分。 如:Object C、C+、Object Pascal、和 CLOS等Page *類和對象類的定義格式class 類名public:成員函數(shù)或數(shù)據(jù)成員的說明;

18、private:數(shù)據(jù)成員或成員的說明;Page *類和對象公有成員:可以被程序中任何代碼訪問;私有的成員只能被類本身的成員函數(shù)及友元類的成員函數(shù)訪問,其他類的成員函數(shù),包括其派生類的成員函數(shù)都不能訪問他們:保護(hù)的成員與私有成員類似,只是除了類本身的成員函數(shù)和說明為友元類的成員函數(shù)可以訪問保護(hù)成員外,該類的派生類成員也可以訪問。Page *舉例class Aprivate:int i;protected:int j;public:int k;int geti三return i;int getj三return j;int getk三return k; Page *下面是訪問類A的對象a中數(shù)據(jù)成員的

19、各種情況:A a;/定義類A的對象aa.i;/非法,i為A的私有成員a.j;/非法,j為A的保護(hù)成員a.k;/合法,k為A的公有成員本例的所有成員函數(shù)都是在類體中。若在類體外實(shí)現(xiàn)。若在類體外實(shí)現(xiàn),需要使用作用域運(yùn)算符:,用它來標(biāo)識(shí)某個(gè)成員函數(shù)是屬于哪個(gè)類的。該運(yùn)算符在這里使用的格式如下:類名:函數(shù)名(參數(shù)表)int A:geti三return i;Page *對象普通對象定義在定義了一個(gè)類以后,定義其對象的一般格式如下:類名 對象名表;對象指針定義類名* 對象指針名表;A a1,a2,*p;Page *對象數(shù)組對象數(shù)組是指數(shù)組元素為對象的數(shù)組。該數(shù)組中若干個(gè)元素必須是同一個(gè)類的若干個(gè)對象。對象

20、數(shù)組的定義,賦值和引用與普通數(shù)組一樣,只是數(shù)組的元素與普通數(shù)組不同,它是同類的若干個(gè)對象。類名 數(shù)組名大小Sle Array5;Page *構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)構(gòu)造函數(shù)功能:在創(chuàng)建對象時(shí)使用給定的值將對象初始化。構(gòu)造函數(shù)的特點(diǎn):(1)構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可放在類體內(nèi),也可放在類體外。(2)構(gòu)造函數(shù)是一個(gè)特殊的函數(shù),該函數(shù)的名字與類名相同,且不指定類型說明,它有隱含的返回值,該值由系統(tǒng)內(nèi)部使用。該函數(shù)可以有一個(gè)參數(shù),也可以有多個(gè)參數(shù)Page *構(gòu)造函數(shù)和析構(gòu)函數(shù)(3)構(gòu)造函數(shù)可以重載,即可以定義多個(gè)參數(shù)不同的函數(shù)。(4)程序中不能直接調(diào)用構(gòu)造函數(shù),在創(chuàng)建對象時(shí)系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)。和一般成員函數(shù)類似,類的構(gòu)造函數(shù)可以帶有參數(shù),也可以重載,構(gòu)造函數(shù)的重載表示類對象的不同的初始化方式。不帶任何參數(shù)的構(gòu)造函數(shù)為默認(rèn)構(gòu)造函數(shù)。Page *示例程序一class Sleint n;public:Sle講義n=0;Sle(int i)n=i;void disp講義cout“n=”nendl;; void main三Sle s1,s2(10);s1.disp三;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論