版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
共102頁(yè)第1頁(yè)面向?qū)ο蠓椒ㄅc技術(shù)共102頁(yè)第2頁(yè)第五部分面向?qū)ο蟮某绦蛟O(shè)計(jì)5.1面向?qū)ο蟪绦蛟O(shè)計(jì)原則5.2面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言5.3面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例5.4面向?qū)ο蟪绦蛟O(shè)計(jì)中的高級(jí)技術(shù)面向?qū)ο蟮某绦蛟O(shè)計(jì)思想出現(xiàn)于60年代末期,以Simula語(yǔ)言為標(biāo)志。發(fā)展到80年代出現(xiàn)了Smalltalk等,直至出現(xiàn)C++、Java等,面向?qū)ο蟪绦蛟O(shè)計(jì)的思想逐漸被人們所廣泛接受,目前已經(jīng)成為程序設(shè)計(jì)領(lǐng)域的主流。共102頁(yè)第3頁(yè)5.1面向?qū)ο蟪绦蛟O(shè)計(jì)的原則5.1.1復(fù)用性5.1.2可擴(kuò)充性5.1.3健壯性5.1.4協(xié)作性面向?qū)ο蟪绦蛟O(shè)計(jì):使用程序設(shè)計(jì)語(yǔ)言將設(shè)計(jì)方案加以表達(dá)類定義靜態(tài)模型動(dòng)態(tài)模型類的實(shí)現(xiàn)約束實(shí)現(xiàn)于代碼中增強(qiáng)系統(tǒng)健壯性共102頁(yè)第4頁(yè)5.1.1復(fù)用性加強(qiáng)軟件可復(fù)用性的原則:保證操作的內(nèi)聚性
功能相對(duì)單一減少單一功能模塊代碼規(guī)模
函數(shù)代碼的適當(dāng)規(guī)模保證操作對(duì)外接口的一致性
相似操作具有一致性接口分離設(shè)計(jì)中的操作與實(shí)現(xiàn)中的操作
以相對(duì)單一和基本的操作聯(lián)合實(shí)現(xiàn)設(shè)計(jì)中的操作操作均勻覆蓋數(shù)據(jù)
考慮操作的普適性加強(qiáng)封裝
操作只針對(duì)內(nèi)部數(shù)據(jù),實(shí)現(xiàn)與接口分離減少操作耦合
減少操作之間的相關(guān),盡量上下文無關(guān)共102頁(yè)第5頁(yè)在校人員類姓名年齡系別教師類工資學(xué)生類班主任姓名年齡系別工資班主任在校人員類5.1.1復(fù)用性復(fù)用方式:繼承聚集電視類家電類型號(hào)外觀顏色生產(chǎn)廠家顯像管型號(hào)冰箱類壓縮機(jī)型號(hào)冰箱類型號(hào)外觀顏色生產(chǎn)廠家顯像管型號(hào)電視類型號(hào)外觀顏色生產(chǎn)廠家顯像管型號(hào)提取公共代碼分離部分成員區(qū)分子類與繼承封裝外部代碼CPointxyCRectanglexyrCPointxyCRectangler共102頁(yè)第6頁(yè)5.1.2可擴(kuò)充性繼承和多態(tài)機(jī)制支持程序具有很強(qiáng)的可擴(kuò)充性。增強(qiáng)可擴(kuò)充性的原則:封裝數(shù)據(jù)封裝操作內(nèi)的數(shù)據(jù)結(jié)構(gòu)減少耦合性避免情況選擇語(yǔ)句區(qū)分公有操作和私有操作共102頁(yè)第7頁(yè)5.1.3健壯性誤操作及錯(cuò)誤輸入數(shù)據(jù)情況下對(duì)象保持狀態(tài)行為正確的能力。程序設(shè)計(jì)中考慮健壯性的原則:防止輸入錯(cuò)誤把握優(yōu)化代碼的時(shí)機(jī)選擇恰當(dāng)?shù)膶?shí)現(xiàn)方法檢測(cè)參數(shù)的合法性推遲對(duì)內(nèi)存分配的限制定義一個(gè)類(包括年、月、日)。計(jì)算該日是本年中第幾天?(注意閏年問題,)。運(yùn)行結(jié)果示例:請(qǐng)輸入日期(年,月,日):1990,9,209月20日是1990年的第263天。共102頁(yè)第8頁(yè)5.1.4協(xié)作性intMyFunction(char*pName,intMark){//Function :Demonstratehowtowritecomment//Parameter :pName,thenameofastudent// Mark,thescoreofstudentpName//Global : xxxx//Algorithm : yyyyyyy//Writer : Wangming//Date : 2002-8-9//note :xxxx……}共102頁(yè)第9頁(yè)5.2面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言5.2.1Smalltalk語(yǔ)言5.2.2Eiffel語(yǔ)言5.2.3C++語(yǔ)言5.2.4Java語(yǔ)言共102頁(yè)第10頁(yè)5.3面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例5.3.0C++基本語(yǔ)法5.3.1類的定義5.3.2對(duì)象的創(chuàng)建及初始化5.3.3消息傳遞與操作調(diào)用5.3.4繼承5.3.5關(guān)聯(lián)的實(shí)現(xiàn)5.3.6聚集關(guān)系的實(shí)現(xiàn)5.3.7多態(tài)性5.3.8運(yùn)算符重載5.3.9靜態(tài)成員本節(jié)以C++語(yǔ)言為例展示如何將OOA和OOD中的類、對(duì)象、類間三種關(guān)系以具體語(yǔ)言方式加以實(shí)現(xiàn)。共102頁(yè)第11頁(yè)5.3.0C++基本語(yǔ)法1VisualC++環(huán)境環(huán)境定制:項(xiàng)目創(chuàng)建:程序編輯:編譯與調(diào)試共102頁(yè)第12頁(yè)1VisualC++環(huán)境創(chuàng)建項(xiàng)目項(xiàng)目(Project,亦稱工程)的創(chuàng)建是使用集成開發(fā)環(huán)境編寫程序的第一步,一個(gè)項(xiàng)目由一組相關(guān)聯(lián)的文件組成,包括用戶將來自己編寫的源程序文件和系統(tǒng)自動(dòng)創(chuàng)建的一系列文件(用于調(diào)試程序、瀏覽程序中各種信息、目標(biāo)文件等),它們被放置在某個(gè)目錄下,由開發(fā)環(huán)境進(jìn)行管理。如果項(xiàng)目已經(jīng)存在,可以通過開發(fā)環(huán)境中File菜單下的菜單項(xiàng)OpenWorkspace打開,否則必須新創(chuàng)建,具體創(chuàng)建步驟如下:?jiǎn)螕鬎ile
→單擊New
→圖5.3.a在Projectname編輯框中鍵入所要編寫的項(xiàng)目名(將來生成可執(zhí)行文件的主文件名與此相同)。選擇該工程所在位置。在Location編輯框中鍵入放置該項(xiàng)目的磁盤目錄,應(yīng)該鍵入全路徑名。選擇項(xiàng)目的類型。選擇Win32ConsoleApplication則創(chuàng)建控制臺(tái)應(yīng)用程序,相當(dāng)于創(chuàng)建dos應(yīng)用程序,只不過所創(chuàng)建程序的輸入輸出限制在一個(gè)控制臺(tái)窗口(類似Windows下的命令提示符窗口)中,而不是整個(gè)屏幕。單擊OK按鈕后,屏幕上將彈出對(duì)話框,如圖5.3.b最方便的選擇是創(chuàng)建一個(gè)“Asimpleapplication”。當(dāng)選擇最后一個(gè)選項(xiàng)時(shí),在所創(chuàng)建的程序中將可以使用MFC類庫(kù)中定義的一些數(shù)據(jù)結(jié)構(gòu),如動(dòng)態(tài)字符串CString和哈希表等,這將給編程帶來方便。共102頁(yè)第13頁(yè)圖5.3.a圖5.3.b1VisualC++環(huán)境共102頁(yè)第14頁(yè)程序編輯:鍵入、剪切、拷貝、粘貼、查找、全程查找、書簽的使用創(chuàng)建一個(gè)項(xiàng)目后該項(xiàng)目被打開,這個(gè)項(xiàng)目中可能是空的,一個(gè)文件都沒有,用戶需要在項(xiàng)目中添加自己的文件,方法如下:選擇開發(fā)環(huán)境中Project菜單下的菜單項(xiàng)AddToProject后,會(huì)出現(xiàn)一個(gè)popup菜單,如果所要添加的是一個(gè)尚未編輯的新文件則選擇菜單項(xiàng)New,否則選擇Files。在所彈出的對(duì)話框中選擇將要添加的文件的類型為C/C++HeaderFile或C++SourceFile,然后鍵入文件名,確認(rèn)后相應(yīng)文件的編輯窗口被打開,編程者就可以在其中編輯程序,編輯操作如同在使用MicrosoftWord或Wordpad等一樣方便。1VisualC++環(huán)境共102頁(yè)第15頁(yè)編譯與調(diào)試:編譯、運(yùn)行,斷點(diǎn)、單步、觀察變量值程序全部或部分編寫完成后需進(jìn)行編譯后才能運(yùn)行。編譯后程序一般都會(huì)出現(xiàn)多個(gè)語(yǔ)法錯(cuò)誤,需要根據(jù)Output窗口中的提示信息對(duì)程序進(jìn)行重新修改,直到編譯后不再出現(xiàn)錯(cuò)誤為止。程序的編譯可以選擇開發(fā)環(huán)境的Build菜單下的Compile...菜單項(xiàng)或Build...菜單項(xiàng),兩者的區(qū)別在于Compile只編譯當(dāng)前獲得焦點(diǎn)的文件,而Build則編譯所有受到當(dāng)前激活文件內(nèi)容改動(dòng)影響的文件,而且一旦編譯通過,將所調(diào)用的系統(tǒng)函數(shù)與程序的目標(biāo)代碼進(jìn)行聯(lián)接,最終形成可執(zhí)行的exe文件。#include<iostream.h>voidPrintString(char*szStr){cout<<"Hellow,"<<szStr<<"!"<<endl;}voidmain(){charpName[80];//User'snamecout<<"Enteryournameplease:";cin>>pName;PrintString(pName);}1VisualC++環(huán)境共102頁(yè)第16頁(yè)5.3.0C++基本語(yǔ)法2C++程序基本結(jié)構(gòu)#include<iostream.h>voidPrintString(char*szStr){cout<<"Hellow,"<<szStr<<"!"<<endl;}voidmain(){charpName[80];//User'snamecout<<"Enteryournameplease:";cin>>pName;PrintString(pName);}文件包含預(yù)處理、函數(shù)、主函數(shù)、語(yǔ)句、標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出共102頁(yè)第17頁(yè)5.3.0C++基本語(yǔ)法3C++的基本數(shù)據(jù)類型intfloatdoublecharTYPE*TYPE&intn=9542; 4Bytesintm(120;) 4Bytescharc=97; 1BytesboolmBool(true); 1Bytes變量:變量是程序運(yùn)行過程中可以改變其值的數(shù)據(jù)對(duì)象,變量在程序中作為數(shù)據(jù)信息載體,可以用來保存非持久數(shù)據(jù)、存儲(chǔ)運(yùn)算結(jié)果、也可以為程序塊之間傳遞數(shù)據(jù)信息。一個(gè)變量具有名字、類型和值三要素
變量數(shù)據(jù) 常量變量的值可在程序運(yùn)行過程中通過賦值語(yǔ)句加以改變
n=n+1234; m=ox_2345 c=‘a(chǎn)’; mBoo=false;共102頁(yè)第18頁(yè)5.3.0C++基本語(yǔ)法3C++的基本數(shù)據(jù)類型是程序執(zhí)行過程中其值不能被改變的數(shù)據(jù)對(duì)象常量字面意義就是它所代表的常量值字面量符號(hào)常量用一個(gè)標(biāo)識(shí)符代表某個(gè)具體常量,出現(xiàn)在程序中的將是這個(gè)標(biāo)識(shí)符,而不是與這個(gè)標(biāo)識(shí)符相聯(lián)系的常量
231、0x3A 、07351.23、3.141e-8’a’、’\n’、’065’、’0xFA’"MynameisJohn"
constintnTopIndex=10;constcharcVisible='y';constchar*MyName="Frank";intnA;intnB;intnC;cout<<“inputA:“;cin>>nA;cout<<“inputB”;cin>>nB;nC=nA+nB;輸入兩個(gè)整數(shù),求它們的和共102頁(yè)第19頁(yè)5.3.0C++基本語(yǔ)法4C++的基本操作+-*/&&||!&|~%賦值語(yǔ)句簡(jiǎn)單賦值語(yǔ)句:n=8;x=3*6+4/a;復(fù)合賦值語(yǔ)句:n+=2;共102頁(yè)第20頁(yè)5.3.0C++基本語(yǔ)法5C++語(yǔ)句間順序控制if(a==0)x=1;elsex=2條件語(yǔ)句if(a==8)b=9;else{if(a==9)b=20;else{if(a==10)b=21;elseb=30;}}b=20b=9b=30b=21a==8a==9a==10falsefalsefalsetruetruetrueif語(yǔ)句()布爾表達(dá)式if語(yǔ)句語(yǔ)句else共102頁(yè)第21頁(yè)switch(x){case1:a==0;break;case2:x=2break;}5.3.0C++基本語(yǔ)法5C++語(yǔ)句間順序控制開關(guān)語(yǔ)句}<語(yǔ)句>:defaultswitch語(yǔ)句()switch<整型表達(dá)式>{<整型常量表達(dá)式><語(yǔ)句>case:共102頁(yè)第22頁(yè)for(inti=n;i>0;i--)n*=i;5.3.0C++基本語(yǔ)法5C++語(yǔ)句間順序控制inti(n);do{n*=i;i--;}while(i>0)inti(n);while(i>0){n*=i;i--;}循環(huán)語(yǔ)句for語(yǔ)句(for<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)<語(yǔ)句>while句(while<表達(dá)式>)語(yǔ)句do語(yǔ)句(while<表達(dá)式>)<語(yǔ)句>do求一個(gè)不很大的自然數(shù)n的階乘(調(diào)試)共102頁(yè)第23頁(yè)5.3.0C++基本語(yǔ)法6數(shù)據(jù)控制函數(shù)參數(shù)表類型參數(shù)名空格,()函數(shù)頭返回值類型函數(shù)名參數(shù)表函數(shù)函數(shù)頭函數(shù)體函數(shù)體{}語(yǔ)句doubleGetProduct(doublex,doubley){doubletemp=x*y;returntemp;}voidmain(){inta=1.2,b(2.1);cout<<GetProduct(a,b)<<endl;}共102頁(yè)第24頁(yè)5.3.0C++基本語(yǔ)法6C++中的數(shù)據(jù)控制傳值調(diào)用#include"iostream.h"voidSwap(intp,intq){inttemp=p;p=q;q=temp;cout<<"p="<<p<<",q="<<q<<endl;}voidmain(){intx=2,y=3;Swap(x,y);cout<<"x="<<x<<",y="<<y<<endl;}#include"iostream.h"voidSwap(int*p,int*q){inttemp=*p;*p=*q;*q=temp;cout<<"*p="<<*p<<",*q="<<*q<<endl;}voidmain(){intx=2,y=3;Swap(&x,&y);cout<<"x="<<x<<",y="<<y<<endl;}對(duì)于傳值調(diào)用,在函數(shù)調(diào)用進(jìn)行形實(shí)結(jié)合時(shí),形式參數(shù)被賦予實(shí)在參數(shù)的(右)值,而在函數(shù)體中形式參數(shù)等價(jià)于函數(shù)內(nèi)定義的變量。由于形參僅被賦予了實(shí)參的右值,因此形參的任何變化不會(huì)引起實(shí)參的改變共102頁(yè)第25頁(yè)5.3.0C++基本語(yǔ)法6C++中的數(shù)據(jù)控制引用調(diào)用 傳址調(diào)用#include"iostream.h"voidSwap(int&p,int&q){inttemp=p;p=q;q=temp;cout<<"p="<<p<<",q="<<q<<endl;}voidmain(){intx=2,y=3;Swap(x,y);cout<<"x="<<x<<",y="<<y<<endl;}#include"iostream.h"intfunc(inta[]){a[2]=8;return0;}voidmain(intargc,char*argv[]){intb[]={1,2,3,4,5};func(b);cout<<b[2]<<endl;}形式參數(shù)和實(shí)在參數(shù)代表內(nèi)存中同一個(gè)數(shù)據(jù)對(duì)象,因此在函數(shù)調(diào)用進(jìn)行形實(shí)結(jié)合時(shí),形式參數(shù)被賦予實(shí)在參數(shù)的(左)值,因此形式參數(shù)的任何變化都會(huì)引起實(shí)在參數(shù)的改變引用調(diào)用方式將作為實(shí)參的表達(dá)式的左值傳遞給被調(diào)函數(shù),在實(shí)現(xiàn)時(shí)相當(dāng)于以實(shí)在參初始化相應(yīng)的引用類型參數(shù),為實(shí)在參數(shù)建立一個(gè)別名,使形式參數(shù)和實(shí)在參數(shù)代表內(nèi)存中的同一個(gè)數(shù)據(jù)對(duì)象
共102頁(yè)第26頁(yè)7內(nèi)聯(lián)函數(shù)引例:編寫一個(gè)函數(shù)比較兩數(shù)大小intmin(intv1,intv2){ return(v1<v2?v1:v2);}5.3.0C++基本語(yǔ)法共102頁(yè)第27頁(yè)為什么要定義一個(gè)min()函數(shù)?易于理解改變一個(gè)局部化的實(shí)現(xiàn)比更改一個(gè)應(yīng)用中的300個(gè)出現(xiàn)要容易得多語(yǔ)義統(tǒng)一,可被重用。問題:函數(shù)的調(diào)用需要開銷。7內(nèi)聯(lián)函數(shù)5.3.0C++基本語(yǔ)法共102頁(yè)第28頁(yè)用內(nèi)聯(lián)函數(shù)解決問題若一個(gè)函數(shù)被指定為內(nèi)聯(lián)函數(shù),則它將在程序中每個(gè)調(diào)用點(diǎn)上被“展開”
intval=min(i,j);
被展開為:
intval=i<j?i:j;7內(nèi)聯(lián)函數(shù)5.3.0C++基本語(yǔ)法共102頁(yè)第29頁(yè)內(nèi)聯(lián)函數(shù)的使用范圍被頻繁調(diào)用的功能函數(shù)體簡(jiǎn)單需要高效率使用內(nèi)聯(lián)函數(shù)的缺點(diǎn):可執(zhí)行程序文件尺寸增大7內(nèi)聯(lián)函數(shù)5.3.0C++基本語(yǔ)法共102頁(yè)第30頁(yè)8默認(rèn)形參值的函數(shù)函數(shù)參數(shù)可以指定默認(rèn)值,稱為默認(rèn)參數(shù)。floatArea(floatWidth,floatLength=12.0)其中,我們只用一個(gè)參數(shù)調(diào)用此函數(shù):
floata;a=Area(6.5);5.3.0C++基本語(yǔ)法共102頁(yè)第31頁(yè)C語(yǔ)言中,要用不同的函數(shù)名定義相同作用的不同類型函數(shù)intcube(intnumber){…}//求整數(shù)立方floatfcube(floatnumber)){…}//浮點(diǎn)數(shù)立方doubledcube(doublenumber){…}//求雙精度數(shù)立方調(diào)用立方計(jì)算函數(shù)需要分別不同的類型函數(shù).C++用相同的函數(shù)名定義不同類型的相同作用函數(shù)intcube(intnumber){…}floatcube(floatnumber){…}doublecube(doublenumber){…}調(diào)用立方計(jì)算函數(shù)用統(tǒng)一的函數(shù)名.9函數(shù)重載5.3.0C++基本語(yǔ)法共102頁(yè)第32頁(yè)代碼區(qū)(codearea)全局?jǐn)?shù)據(jù)區(qū)(dataarea)堆區(qū)(heaparea)棧區(qū)(stackarea)存放程序代碼存放程序的全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)存放程序的動(dòng)態(tài)數(shù)據(jù)存放程序的局部數(shù)據(jù)程序的內(nèi)存區(qū)域10動(dòng)態(tài)存儲(chǔ):new&delete5.3.0C++基本語(yǔ)法共102頁(yè)第33頁(yè)5.3.1類的定義1.類說明:class<ClassName>{private:
私有數(shù)據(jù)和函數(shù)
public:
公有數(shù)據(jù)和函數(shù)
protected:
受保護(hù)數(shù)據(jù)和函數(shù)};
CBookm_pczName:char*=“程序設(shè)計(jì)”nTotalPage:int=280nEdition:int=2char*GetBookName();intGetTotalPage();intGetEdition();classCBook{public:char*m_pczName;intnTotalPage;intnEdition;char*GetBookName();intGetTotalPage();intGetEdition();};私有成員只能被其自身成員所訪問公有成員可以被任何函數(shù)所引用保護(hù)成員只能在該類的派生類類體中使用共102頁(yè)第34頁(yè)5.3.1類的定義2.成員函數(shù)定義:char*CBook::GetBookName(char*pStr){strcpy(pStr,m_pczName);returnpStr;}classCBook{public:char*m_pczName;intnTotalPage;intnEdition;char*GetBookName();intGetTotalPage();intGetEdition();};成員函數(shù)的定義除必須指明函數(shù)所屬類外,與一般的函數(shù)定義類似:classCBook{public:char*m_pczName;intnTotalPage;intnEdition;char*GetBookName(){strcpy(pStr,m_pczName);returnpStr;}intGetTotalPage()intGetEdition();};內(nèi)聯(lián)函數(shù)共102頁(yè)第35頁(yè)5.3.2對(duì)象的創(chuàng)建及初始化1.由類創(chuàng)建對(duì)象實(shí)例classCPoint{private:intm_x;intm_y;public:void SetXY(intx,inty){m_x=x;m_y=y;}intGetX(){returnm_x;}intGetY(){returnm_y;}};從類產(chǎn)生解空間對(duì)象的過程是一個(gè)從一般到特殊的演繹過程,這個(gè)過程在C++中有相對(duì)應(yīng)的語(yǔ)法——對(duì)象定義。定義對(duì)象象定義一個(gè)普通變量一樣,只不過這里將類看做是類型(一個(gè)抽象類型),具有該類類型的變量稱為對(duì)象:voidmain(){CPointMyPoint1,MyPoint2; //創(chuàng)建對(duì)象,調(diào)用缺省構(gòu)造函數(shù)初始化
MyPoint1.SetXY(2,3); //設(shè)置MyPoint1的屬性值分別為2和3MyPoint2.SetXY(4,5); //設(shè)置MyPoint2的屬性值分別為2和3intx=MyPoint1.GetX(); //調(diào)用成員函數(shù)得到數(shù)據(jù)成員m_x的值
inty=MyPoint1.GetY(); //調(diào)用成員函數(shù)得到數(shù)據(jù)成員m_y的值
cout<<x<<";"<<y<<endl;cout<<MyPoint2.GetX()<<";"<<MyPoint2.GetY()<<endl;
CPoint*pPoint; //定義指向CPoint類對(duì)象的指針
pPoint=&MyPoint2; //將對(duì)象MyPoint2的地址賦值給pPointx=pPoint->GetX(); //通過指針調(diào)用成員函數(shù)
CPoint*pPoint1=newCPoint;pPoint1->SetXY(6,7); //設(shè)置pPoint1所指對(duì)象的屬性值
CPoint&refPoint=MyPoint1;x=refPoint.GetX();}三種調(diào)用方式對(duì)象的內(nèi)存映像共102頁(yè)第36頁(yè)5.3.2對(duì)象的創(chuàng)建及初始化2.成員函數(shù)中對(duì)象成員的引用CBook*CBook::GetBookPtr(){……returnthis;}CBook&CBook::GetBookRef(){……return*this;}this指針并不常用,通常用于定義返回指向隱式對(duì)象指針或引用的成員函數(shù)。例如,在CBook類中添加需要返回指當(dāng)前函數(shù)所屬對(duì)象的引用或指向該對(duì)象的指針,可以按如下方式定義:voidCPoint::SetXY(intx,inty){this->m_x=x;this->m_y=y;}成員函數(shù)所引用的數(shù)據(jù)成員或函數(shù)成員并未指明是哪個(gè)對(duì)象的成員隱式調(diào)用顯式調(diào)用共102頁(yè)第37頁(yè)3.對(duì)象創(chuàng)建與構(gòu)造函數(shù)5.3.2對(duì)象的創(chuàng)建及初始化構(gòu)造函數(shù)的名字與類的名字相同,而且構(gòu)造函數(shù)沒有返回值,即使是void類型也是非法的,只要滿足了這兩個(gè)條件,原則上可以定義任何形式的構(gòu)造函數(shù),因此構(gòu)造函數(shù)是可以重載的。例如,為CPoint類添加構(gòu)造函數(shù):CPoint::CPoint(){m_x=0;m_y=0;}CPoint::CPoint(intx,inty){m_x=x;m_y=y;}CPoint::CPoint(constCPoint&pt){m_x=pt.m_x;m_y=pt.m_y;}CPointmPt1; //調(diào)用CPoint::CPoint()CPointmPt2(2,3); //調(diào)用CPoint::CPoint(intx,inty)CPoint*pPt1=newCPoint(4,5); //調(diào)用CPoint::CPoint(intx,inty)CPoint*pPt=newCPoint(mPt2); //調(diào)用CPoint::CPoint(CPoint&pt)在創(chuàng)建對(duì)象時(shí),構(gòu)造函數(shù)被自動(dòng)調(diào)用,究竟調(diào)用多個(gè)構(gòu)造函數(shù)中的哪一個(gè)要根據(jù)創(chuàng)建對(duì)象時(shí)所提供的初始化參數(shù),采用重載函數(shù)的判斷機(jī)制判斷。例如下面的對(duì)象聲明語(yǔ)句:CPoint::CPoint(constCPointpt)CPoint::CPoint(constCPoint*pt)CPoint::CPoint(CPointpt)共102頁(yè)第38頁(yè)4.對(duì)象的消亡與析構(gòu)函數(shù)5.3.2對(duì)象的創(chuàng)建及初始化當(dāng)一個(gè)對(duì)象消亡時(shí)會(huì)自動(dòng)調(diào)用相應(yīng)的析構(gòu)函數(shù)進(jìn)行一系列的“善后”工作,如:釋放曾經(jīng)申請(qǐng)的內(nèi)存空間等。~ClassName(){}enumSEX{male,female,unknow};classCStudent{private:char* m_pczName;int m_nAge;SEX m_sSex;public:CStudent(char*pName,intnAge,SEXs);CStudent(char*pName);~CStudent();};CStudent::CStudent(char*pName){cout<<"OBJECTCREATE:"<<pName<<endl;m_pczName=newchar[strlen(pName)+1];if(m_pczName!=0)strcpy(m_pczName,pName);m_nAge=-1; //-1表示尚未初始化該屬性
m_sSex=unknow;}CStudent::CStudent(char*pName,intnAge,SEXs){cout<<"OBJECTCREATE:"<<pName<<endl;m_pczName=newchar[strlen(pName)+1];if(m_pczName!=0)strcpy(m_pczName,pName);
m_nAge=nAge;m_sSex=s;}CStudent::~CStudent(){cout<<"OBJECTDELETE:"<<m_pczName<<endl;delete[]m_pczName;}voidmain(){CStudents1("John",10,male);CStudent*ps=newCStudent("Jane",10,female);deleteps;}共102頁(yè)第39頁(yè)5.關(guān)于拷貝構(gòu)造函數(shù)5.3.2對(duì)象的創(chuàng)建及初始化ClassName(ClassName&srcObj);缺省拷貝構(gòu)造函數(shù),其功能是將形參對(duì)象的屬性值直接賦值給新創(chuàng)建對(duì)象的相應(yīng)屬性,使得兩個(gè)對(duì)象的對(duì)應(yīng)屬性的值相同。當(dāng)類中具有指針類屬性時(shí),將出現(xiàn)運(yùn)行錯(cuò)誤,如將上例中主函數(shù)改為(運(yùn)行,原因):voidmain(){CStudents1("John",10,male);CStudents2(s1);}classCStudent{private:char* m_pczName;int m_nAge;SEX m_sSex;public:CStudent(char*pName,intnAge,SEXs);CStudent(char*pName);
CStudent(constCStudent&srcStudent){m_pczName=newchar[strlen(srcStudent.m_pczName)+1];strcpy(m_pczName,srcStudent.m_pczName);}~CStudent();};共102頁(yè)第40頁(yè)對(duì)象屬性值的變化(對(duì)象間的賦值)5.3.2對(duì)象的創(chuàng)建及初始化在對(duì)象間可以使用賦值符
CPointPt1,Pt2; Pt1.SetXY(2,3); Pt2=Pt1;由于系統(tǒng)會(huì)給出賦值符的缺省定義,所以Pt2和Pt1對(duì)應(yīng)的屬性相等class<ClassName>{……<ClassName>&operator=(<TYPE>arg);
//返回值類型可以為ClassName、void及其它任何類型
……};<ClassName>&<ClassName>::operator=(TYPEarg)
//返回值類型與原型相同{……}共102頁(yè)第41頁(yè)5.3.3消息傳遞與操作調(diào)用操作調(diào)用方式與消息傳遞classLine{private:CPointm_cpStartPoint;CPointm_cpEndPoint;public:voidSetLine(CPoint&Start,CPoint&End){m_cpStartPoint.SetXY(Start.GetX(),Start.GetY());m_cpEndPoint.SetXY(End.GetX(),End.GetY());}};classCPoint{private:intm_x;intm_y;public:void SetXY(intx,inty){m_x=x;m_y=y;}intGetX(){returnm_x;}intGetY(){returnm_y;}};共102頁(yè)第42頁(yè)5.3.4繼承1.單一繼承C++提供下述常見語(yǔ)法格式:
class<DerivedClassName>:<AccessSpecifier><BaseClassName>{……};
矩形長(zhǎng)寬位置求面積求周長(zhǎng)求位置正方形求面積求周長(zhǎng)求位置邊長(zhǎng)classCRectangle//矩形類{public:CPointm_cpLocation;//圖形所在位置
intm_nWidth; //圖形的寬度
intm_nHeight; //圖形的高度
CRectangle(intnX,intnY,intnWidth,intnHeight);intGetArea(); //求面積
intGetPerimeter(); //求周長(zhǎng)
CPoint&GetPosition();//返回圖形位置};共102頁(yè)第43頁(yè)CRectangle::CRectangle(intnX,intnY,intnW,intnH):m_cpLocation(nX,nY){ m_nWidth=nW; m_nHeight=nH;}intCRectangle::GetArea(){returnm_nWidth*m_nHeight;}intCRectangle::GetPerimeter(){returnm_nWidth+m_nWidth+m_nHeight+m_nHeight;}CPoint&CRectangle::GetPosition(){returnthis->m_cpLocation;}5.3.4繼承1.單一繼承對(duì)象屬性成員的初始化:ClassName::ClassName(ArgList0):ObjectName(ArgList1){……}共102頁(yè)第44頁(yè)classCSquare:publicCRectangle//正方形類,派生自矩形類{intm_nEdge;public:CSquare(intnX,intnY,intnEdge);intGetEdge();//返回邊長(zhǎng)};CSquare::CSquare(intnX,intnY,intnEdge):CRectangle(nX,nY,nEdge,nEdge){m_nEdge=nEdge;}intCSquare::GetEdge(){returnm_nEdge;}5.3.4繼承1.單一繼承繼承中的構(gòu)造函數(shù)實(shí)現(xiàn):ClassName::ClassName(ArgList0):BaseClassName(ArgList1){……}共102頁(yè)第45頁(yè)voidmain(){CRectangler(1,1,2,3);CSquares(0,0,2);cout<<r.GetArea()<<endl<<s.GetArea()<<endl;}5.3.4繼承1.單一繼承共102頁(yè)第46頁(yè)5.3.4繼承2.基類成員訪問控制有兩個(gè)因素同時(shí)控制著派生類對(duì)基類成員的訪問權(quán)限,這兩個(gè)因素就是基類類體中類成員的訪問說明符,及派生類的派生方式。下表總結(jié)了這兩個(gè)因素對(duì)基類成員訪問權(quán)限的影響規(guī)律,從表可以看到,在任何派生方式下,基類的私有成員都是派生類不可訪問成員;在保護(hù)派生情況下,除私有成員外均被派生類以保護(hù)成員方式所繼承;公有派生時(shí)不改變基類公有和保護(hù)成員的訪問權(quán)限基類成員在派生類中的訪問權(quán)限 成類員派生方式privateprotectedpublicprivate不可訪問私有私有protected不可訪問保護(hù)保護(hù)public不可訪問保護(hù)公有共102頁(yè)第47頁(yè)5.3.4繼承3.多重繼承C++還提供了另一種復(fù)雜的繼承方式,允許從多個(gè)基類派生一個(gè)子類,即多重繼承。一般形式為:class<ClassName0> : <AccessSpecifier1><ClassName1>, <AccessSpecifier2><ClassName2>, …, <AccessSpecifiern><ClassNamen>{……};<ClassName0>::<ClassName0>(ArgList0):<ClassName1>(ArgList1),…,<ClassNamen>(ArgListn){……}共102頁(yè)第48頁(yè)WNDSTRUCTCWindowTreeCScreenObjectCEditTextCWnd5.3.4繼承3.多重繼承#include"iostream.h"#include"stdlib.h"#include"string.h"classCWnd;//引用性說明#defineMAXTEXTBUFFER0xffffclassCPoint{private:intm_x;intm_y;public:CPoint(intx=0,inty=0){m_x=x;m_y=y;}intGetX(){returnm_x;}intGetY(){returnm_y;}};共102頁(yè)第49頁(yè)classWNDSTRUCT{//本對(duì)象中含有窗口公共數(shù)據(jù)
protected:char*m_pczWndName; //窗口名字
//下述變量表示窗口左上角和右下角的坐標(biāo)
CPointm_cpTopLeft;CPointm_cpBottomRight;
//下述三個(gè)量用于建立窗口系統(tǒng)的樹結(jié)構(gòu)
CWnd*m_pParentWindow; //指向本窗口的父窗口
CWnd**m_pChildFirst; //CWnd的指針數(shù)組,放著本窗口的子窗口
CWnd**m_pSiblingFirst; //指向本窗口的兄弟窗口
char*m_pEditTextBuffer; //指向窗口編輯區(qū)文本緩沖區(qū)
public:WNDSTRUCT(constWNDSTRUCT&rWndArch){m_pczWndName=newchar[strlen(rWndArch.m_pczWndName)+1];if(m_pczWndName==0){cout<<"Noenoughspace!"<<endl;exit(0);}strcpy(m_pczWndName,rWndArch.m_pczWndName);}~WNDSTRUCT(){delete[]m_pczWndName;}};共102頁(yè)第50頁(yè)classCScreenObject:virtualprivateWNDSTRUCT{public:voidMoveToWindow(constCPoint&cpWndPos,intnWidth,intnHeight){HideWindow();m_cpTopLeft=cpWndPos;m_cpBottomRight=CPoint(m_cpTopLeft.GetX()+nWidth,m_cpBottomRight.GetY()+nHeight);RedrawWindow();}~CScreenObject(){delete[]m_pczWndName;}
voidHideWindow(){/*隱藏當(dāng)前窗口*/}
voidRedrawWindow(){/*繪制并顯示當(dāng)前窗口*/}};共102頁(yè)第51頁(yè)classCEditText:virtualprivateWNDSTRUCT{public:CEditText(WNDSTRUCT&rWndArch):WNDSTRUCT(rWndArch){m_pEditTextBuffer=newchar[MAXTEXTBUFFER+1];if(m_pEditTextBuffer==0){cout<<"Noenoughspace";exit(1);}memset(m_pEditTextBuffer,'\0',MAXTEXTBUFFER+1);}~CEditText(){delete[]m_pEditTextBuffer;}voidTextCut(intnStart,intnEnd){char*TempStr=newchar[MAXTEXTBUFFER-nEnd];memset(m_pEditTextBuffer+nEnd,'\0',MAXTEXTBUFFER-nEnd);memcpy(m_pEditTextBuffer+nStart,TempStr,MAXTEXTBUFFER-nEnd);delete[]TempStr;
//此處應(yīng)該調(diào)用適當(dāng)函數(shù)重新繪制編輯區(qū)顯示內(nèi)容
}
/*TextPaste(),TextCopy()等函數(shù)*/};共102頁(yè)第52頁(yè)classCWindowTree:virtualprivateWNDSTRUCT{public:CWindowTree(WNDSTRUCT&rWndArch):WNDSTRUCT(rWndArch){}voidAddChild(CWnd*pChild){while(*m_pChildFirst!=0)++m_pChildFirst;*m_pChildFirst=pChild;}
/*其它關(guān)于窗口樹的操作*/};classCWnd:publicCWindowTree,publicCEditText,publicCScreenObject{…};共102頁(yè)第53頁(yè)5.3.4繼承3.多重繼承(二義性)classCBase1{public:voidMyFunc(){cout<<"ThisisCBase1'sMyFunc"<<endl;}};classCBase2{public:voidMyFunc(){cout<<"ThisisCBase2'sMyFunc"<<endl;}};classCDerived:publicCBase1,publicCBase2{public:voidfunc(){MyFunc();}//錯(cuò)誤!兩義性!};voidmain(){CDerivedobj;obj.func();}classCDerived:publicCBase1,publicCBase2{public:voidfunc(){CBase1::MyFunc();//調(diào)用CBase1類的成員函數(shù)MyFunc()CBase2::MyFunc();//調(diào)用CBase2類的成員函數(shù)MyFunc()}};CBase2Func()CBase1MyFunc()CBase2MyFunc()共102頁(yè)第54頁(yè)5.3.4繼承3.多重繼承(派生類對(duì)象內(nèi)存映像)classCBase{public:intb0;CBase(){b0=0x01;}};classCBase1:publicCBase{public:intb1;CBase1(){b1=0x11;}};classCBase2:publicCBase{public:intb2;CBase2(){b2=0x12;}};classCDerived:publicCBase1,publicCBase2{public:intb;CDerived(){b=0x21;}};voidmain(){CDerivedobj;}CBaseCBase1CBase2CBase2共102頁(yè)第55頁(yè)classCBase{public:intb;};classCBase1:publicCBase{};classCBase2:publicCBase{};classCDerived:publicCBase1,publicCBase2{public:intfunc();};CDerivedobj;obj.b; //錯(cuò),二義性obj.CBase::b;
//錯(cuò),二義性obj.CBase1::b;
//使用從CBase1來的bobj.CBase2::b;//使用從CBase2來的bclassCBase{public:intb0;CBase(){b0=0x01;}};classCBase1:virtualpublicCBase{public:intb1;CBase1(){b1=0x11;}};classCBase2:virtualpublicCBase{public:intb2;CBase2(){b2=0x12;}};classCDerived:publicCBase1,publicCBase2{public:intb;CDerived(){b=0x21;}};voidmain(){CDerivedobj;}5.3.4繼承3.多重繼承(虛基類)共102頁(yè)第56頁(yè)共102頁(yè)第57頁(yè)實(shí)現(xiàn)單向關(guān)聯(lián):
用指針可以方便地實(shí)現(xiàn)單向關(guān)聯(lián)。如果關(guān)聯(lián)的重?cái)?shù)是一元的,則實(shí)現(xiàn)關(guān)聯(lián)的指針是一個(gè)簡(jiǎn)單指針;如果重?cái)?shù)是多元的,則需要用一個(gè)指針集合實(shí)現(xiàn)關(guān)聯(lián)。
5.3.5關(guān)聯(lián)的實(shí)現(xiàn)共102頁(yè)第58頁(yè)圖5.4用指針實(shí)現(xiàn)單向關(guān)聯(lián)(a)關(guān)聯(lián);(b)實(shí)現(xiàn)5.3.5關(guān)聯(lián)的實(shí)現(xiàn)共102頁(yè)第59頁(yè)圖5.5用指針集合實(shí)現(xiàn)關(guān)聯(lián)(a)關(guān)聯(lián);(b)實(shí)現(xiàn)5.3.5關(guān)聯(lián)的實(shí)現(xiàn)共102頁(yè)第60頁(yè)實(shí)現(xiàn)雙向關(guān)聯(lián):
許多關(guān)聯(lián)都需要雙向遍歷,當(dāng)然,兩個(gè)方向遍歷的頻度往往并不相同。實(shí)現(xiàn)雙向關(guān)聯(lián)有下列三種方法。
只用屬性實(shí)現(xiàn)一個(gè)方向的關(guān)聯(lián),當(dāng)需要反向遍歷時(shí)就執(zhí)行一次正向查找。
兩個(gè)方向的關(guān)聯(lián)都用屬性實(shí)現(xiàn)。如圖5.5
用獨(dú)立的關(guān)聯(lián)對(duì)象實(shí)現(xiàn)雙向關(guān)聯(lián)。如圖5.65.3.5關(guān)聯(lián)的實(shí)現(xiàn)共102頁(yè)第61頁(yè)圖5.6用對(duì)象實(shí)現(xiàn)關(guān)聯(lián)5.3.5關(guān)聯(lián)的實(shí)現(xiàn)共102頁(yè)第62頁(yè)公司名稱:char*m_pName老板:CPersonboss............boss結(jié)婚丈夫妻子人姓名:char*m_pName年齡:intm_nAge............工作單位由...掌管0..1老板薪金基本薪酬:intnBasic生活補(bǔ)助:intnSubsidy............為...工作**雇傭5.3.5關(guān)聯(lián)的實(shí)現(xiàn)classCCompany{private:char*m_pName;//按圖中要求
CPerson*boss;//因?yàn)閳D中標(biāo)出老板可有可無,所以用指針表示
CPerson*m_Employee[20]//公司員工最多20};classCPerson{private:char*m_pName;intm_nAge;CCompany*comp;//comp為一個(gè)CCompany的數(shù)組,因?yàn)榭蔀槎鄠€(gè)公司工作
CSalary*salary;//salary為一個(gè)CSalary數(shù)組,與每個(gè)comp相對(duì)應(yīng)
CPeron*consort;//按圖中的關(guān)系添加了這一個(gè)屬性標(biāo)明配偶
intsex; //為標(biāo)明配偶為男女,所以引入本人的性別};classCSalary{//只要單向關(guān)系即可,所以沒有引入標(biāo)明工資所有者的屬性
private:intnBasic;intnSubsidy;};共102頁(yè)第63頁(yè)5.3.6聚集關(guān)系的實(shí)現(xiàn)classCButton{
…CButton(){……}
…};classCIcon{
…CIcon(){……}
…};classCMessageWindow{private:CButtonm_ButtonOK;CButtonm_ButtonCANCEL;CIconm_Icon;
…public:CMessageWindow():m_ButtonOK(""),m_ButtonCANCEL(""),m_Icon(""){…}
…};消息窗口按鈕圖標(biāo)菜單確定0..1幫助0..1消息10..1文件0..1編輯0..1消息窗口按鈕確定0..1圖標(biāo)消息10..1菜單文件0..1編輯0..1幫助0..11.復(fù)合聚合的實(shí)現(xiàn)共102頁(yè)第64頁(yè)小組成員535班級(jí)成員組號(hào):intm_nGroupID學(xué)生:CStudent*m_pStudentsCGroup設(shè)置學(xué)生:SetStudent(CStudent*)構(gòu)造空組nID:CGroup(intnID)班號(hào):intm_nClassID學(xué)生:CStudent*m_pStudentsCClass設(shè)置學(xué)生:SetStudent(CStudent*)構(gòu)造空班nID:CClass(intnID)CStudent5.3.6聚集關(guān)系的實(shí)現(xiàn)2.共享聚合的實(shí)現(xiàn)classCStudent{CStudent(constchar*pStudentName){…}…};共102頁(yè)第65頁(yè)classCGroup{private:CStudent**m_pStudents;intm_nGroupID;intm_nstuNum;…public:voidSetStudent(CStudent*pStudents){if(m_nstuNum>=5){cout<<“小組成員已滿”;return;}m_pStudent[m_nstuNum++]=pStudent;}
CGroup(intnID){m_nGroupID=nID;m_pStudents=new(Cstudnet*)[5];//小組由5名學(xué)生組成
m_nstuNum=0;…}…};共102頁(yè)第66頁(yè)classCClass{private:CStudent**m_pStudents;intm_nClassID;intm_nstuNum;…public:CClass(intnID){m_nClassID=nID;m_pStudents=new(Cstudent*)[35];//班級(jí)由35名學(xué)生組成
m_nstuNum=0;…}CStudent*GetStudent(){returnm_pStudents;}voidSetStudent(CStudent*pStudents){m_pStudent[m_nstuNum++]=pStudent;}……};共102頁(yè)第67頁(yè)voidmain(){CStudenttheWhole[100]={CStudent("Marry"),…,CStudent("Tom")};CClassMyClass3(3);
//成立班級(jí),但具體由哪些學(xué)生組成尚未確定
MyClass3.SetStudent((theWhole+70));
//將學(xué)校學(xué)生名冊(cè)中第71位學(xué)生加入到MyClass3班
CGroupGroup6(6);
Group6.SetStudent((MyClass3.GetStudent()+25));
//將MyClass3班的學(xué)生名冊(cè)中第26名學(xué)生加入第6學(xué)習(xí)小組
…}共102頁(yè)第68頁(yè)5.3.7多態(tài)性與虛函數(shù)多態(tài)性(Polymorphism)C++支持兩種多態(tài)性:編譯時(shí)的多態(tài)性(靜態(tài))通過重載來實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性(動(dòng)態(tài))通過虛函數(shù)來實(shí)現(xiàn)共102頁(yè)第69頁(yè)5.3.7多態(tài)性與虛函數(shù)classPoint{private:intx,y;public:Point(){x=0;y=0;}Point(intx_pos,inty_pos){x=x_pos;y=y_pos;}Point(constPoint&p){x=p.x;y=p.y;}intgetx(){returnx;}intgety(){returny;}};enumColorType{White,Black,Red,Green,Blue,Yellow,Magenta,Cyan};ShapeLineRectangleCircleSquare繪圖程序中多態(tài)性的應(yīng)用共102頁(yè)第70頁(yè)classShape{private:ColorTypecolor;public:Shape(ColorTypec){color=c;}virtualvoiddraw(){cout<<“drawnotoverridden”<<endl;exit(1);}};classLine:publicShape{private:PointStart,End;public:Line(Points,Pointe,ColorTypec):Shape(c),Start(s),End(e){}virtualvoiddraw();};共102頁(yè)第71頁(yè)classRectangle:publicShape{private:PointupperLeft,lowerRight;public:Rectangle(Pointul,Pointlr,ColorTypec):Shape(c),upperLeft(up),lowerRight(lr){}virtualvoiddraw();};
classCircle:publicShape{private:Pointcenter;intradius;public:Circle(Pointctr,intr,ColorTypec):Shape(c),center(ctr){radius=r;}virtualvoiddraw();};共102頁(yè)第72頁(yè)classSquare:publicRectangle{public:Square(Pointul,intl,ColorTypec):Rectangle(ul,Point(ul.getx()+l,ul.gety()+l),c){}};
classPicture{private:Shape*s[6];public:Picture(Shape*s1,Shape*s2,Shape*s3,Shape*s4,Shape*s5,Shape*s6){s[0]=s1;s[1]=s2;s[2]=s3;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年家電制造設(shè)備合作協(xié)議書
- 2025年固態(tài)地振動(dòng)強(qiáng)度記錄儀合作協(xié)議書
- 一年級(jí)上冊(cè)語(yǔ)文期末試題(15篇)
- 護(hù)理心電圖知識(shí)專項(xiàng)考核試題
- 2025年個(gè)人獨(dú)資轉(zhuǎn)讓合同(2篇)
- 2025年個(gè)人項(xiàng)目投資合作協(xié)議經(jīng)典版(2篇)
- 2025年產(chǎn)品購(gòu)買合同參考樣本(2篇)
- 2025年個(gè)人房屋抵押貸款合同(4篇)
- 2025年書面離婚合同協(xié)議范文(2篇)
- 2025年鄉(xiāng)村公路承包合同(五篇)
- 中國(guó)人口研究專題報(bào)告-中國(guó)2025-2100年人口預(yù)測(cè)與政策建議-西南財(cái)經(jīng)大學(xué)x清華大學(xué)-202501
- 2025年度廚師職業(yè)培訓(xùn)學(xué)院合作辦學(xué)合同4篇
- 《組織行為學(xué)》第1章-組織行為學(xué)概述
- 25版六年級(jí)寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語(yǔ)試卷含解析
- 市場(chǎng)營(yíng)銷試題(含參考答案)
- 2024年山東省泰安市高考物理一模試卷(含詳細(xì)答案解析)
- 護(hù)理指南手術(shù)器械臺(tái)擺放
- 腫瘤患者管理
- 四川省成都市高新區(qū)2024年七年級(jí)上學(xué)期語(yǔ)文期末試卷【含答案】
- 2025年中國(guó)航空部附件維修行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局、行業(yè)政策及需求規(guī)模預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論