版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、wordword I 13lOperation *pOper; /- COperati onAdd Add; COperati on Sub Sub; COperatio nMul Mul; COperatio nDiv Div; double result=0;定義接口指針,多態(tài)實(shí)現(xiàn)用lOperation *pOper; /- COperati onAdd Add; COperati on Sub Sub; COperatio nMul Mul; COperatio nDiv Div; double result=0;定義接口指針,多態(tài)實(shí)現(xiàn)用/ 類的構(gòu)造CLASS_CTOR(COperati
2、o nAdd,Add); CLASS_CTOR(COperatio nSub,Sub); CLASS_CTOR(COperati on Mul,Mul); CLASS_CTOR(COperati on Div,Div);/靜態(tài)內(nèi)存分配處理方法pOper = &Add;result = pOper-GetResult(53.12,86.4);prin tf(ADD: 53.12+86.4 =%6.3frn ”,result);pOper = & Sub; /- 減法result = pOper-GetResult(53.12,86.4); prin tf(Sub: 53.12-86.4 =%6.
3、3frn,result);pOper = & Mui; /- 乘法result = pOper-GetResult(53.12,86.4); prin tf(Mul: 53.12*86.4 =%6.3frn,result);pOper = & Div; /- 除法result = pOper-GetResult(53.12,86.4); prin tf(Div: 53.12/86.4 =%6.4fr n,result);II動(dòng)態(tài)內(nèi)存分配方法 /-加法 printf(rn dynamic memory:rnn); pOper =New(COperatio nAdd);result = pOper
4、-GetResult(12.5,36.8); prin tf(ADD: 12.5+36.8 =%6.3fr n,result); II-減法pOper =New(COperatio nSub);result = pOper-GetResult(12.5,36.8); prin tf(Sub: 12.5-36.8 =%6.3frn,result); II-乘法pOper =New(COperati onM ul);result = pOper-GetResult(12.5,36.8); prin tf(Mul: 12.5*36.8 =%6.3frn,result); II-除法pOper =Ne
5、w(COperatio nDiv);result = pOper-GetResult(12.5,36.8);prin tf(Div: 12.5/36.8 =%6.3frn,result);結(jié)果輸出如下:dyn amic memory:從main()函數(shù)的調(diào)用可以看出,處理運(yùn)算始終是pOper-GetResult(numA , numB)這條語句,改變其運(yùn)算功能,只需要改變pOper所指向的對(duì)象。這就是多態(tài),一樣的語句實(shí)現(xiàn)不同的功能。抽象和多態(tài)在面向?qū)ο?C和設(shè)計(jì)模式中將顯示出強(qiáng)大的威力。第2章:面向?qū)ο?C必要根底知識(shí)為了幫助大家理解 OO(和更好的使用OOC這章主要是講解一些必要的C語言和宏
6、定義,介紹OOC.h為什么要這樣設(shè)計(jì)。1、本書的OOC書寫規(guī)如此1.1、普通類的定義CLASS(className) typeName data;void (* in it)(void*t, type others);/typeName (*m_fu nctio n)(void*t, type others typeName data;void (* in it)(void*t, type others);/typeName (*m_fu nctio n)(void*t, type others 其他看情況;普通類是沒有繼承過任何類、任何接口的類。普通類必須要有 1.2、抽象類的定義ABSTR
7、ACT_CLASS(className) typeName data;void (* in it)(void*t, type others);/typeName (*m_fu nctio n)(void*t, type others 其他看情況必須有該函數(shù),參數(shù)至少有void*t);/- 至少有void*t 參數(shù),必須有該函數(shù),參數(shù)至少有void*t);/- 至少有void*t 參數(shù),;實(shí)質(zhì)上和普通類是一樣的定義,只是沒有自己的方法實(shí)現(xiàn),宏 可讀性。如果抽象類沒有數(shù)據(jù)data,最好就定義為接口。;實(shí)質(zhì)上和普通類是一樣的定義,只是沒有自己的方法實(shí)現(xiàn),宏 可讀性。如果抽象類沒有數(shù)據(jù)data,最好就
8、定義為接口。1.3、接口和實(shí)現(xiàn)ABSTRACT_CLAS目的是幫助程序的INTERFACE(IName)typeName (*m_fu nction)( type others ;CLASS(Chid_lmpleme nt) IMPLEMENTS(IName); void (*i ni t)(void*t);/-;接口的出現(xiàn)就是希望一個(gè)接口能有多個(gè)實(shí)現(xiàn),typeName (*m_fu nction)( type others ;CLASS(Chid_lmpleme nt) IMPLEMENTS(IName); void (*i ni t)(void*t);/-;接口的出現(xiàn)就是希望一個(gè)接口能有多
9、個(gè)實(shí)現(xiàn),一個(gè)接口至少有 上才有意義,否如此接口可以合并到子類中去。1.4 一個(gè)接口至少有 上才有意義,否如此接口可以合并到子類中去。1.4 繼承:在子類的最開頭加宏EXTENDS(baseClass);個(gè)實(shí)現(xiàn),接口只有在有2個(gè)實(shí)現(xiàn)以例如繼承A,繼承A,必須放在最開頭 EXTENDS(A); -B;1.5、類的構(gòu)造:將函數(shù)指針和函數(shù)關(guān)聯(lián) 沒有父類的類的構(gòu)造:CTOR(ClassName)FUNCTION_BINDING(FUN1,FUN2);END_CTOR有繼承的類的構(gòu)造:CTOR(ClassName)BASE_CTOR(baseClass)FUNCTION_BINDING(FUN1,FUN2
10、);END_CTOR1.6、動(dòng)態(tài)內(nèi)存分配ClassName *pClass = New_ClassName(); 或者ClassName *pClass = NEW(ClassName); 或ClassName *pClass = New(ClassName);提供多種方法,讀者可以根據(jù)自己的喜好選擇,本人習(xí)慣用pClass = New(ClassName),方式,這樣New()看起來更接近C+運(yùn)算符new。1.7、顯式構(gòu)造函數(shù)CLASS_CTOR(ClassName, objName);或者ClassName_Sett in g(&objName)這兩個(gè)宏展開后實(shí)際上是一樣的,提供兩種方法是
11、方便不同人的使用習(xí)慣。顯式構(gòu)造函數(shù)主要 用于類實(shí)例化后對(duì)其進(jìn)展構(gòu)造。在動(dòng)態(tài)內(nèi)存分配中已經(jīng)隱含了對(duì)該宏對(duì)應(yīng)的函數(shù)的調(diào)用。1.8、動(dòng)態(tài)對(duì)象內(nèi)存釋放DEL(p);或者DELETE(p);2、面向?qū)ο驩OC.H的設(shè)計(jì)與其關(guān)鍵宏含義面向?qū)ο驝的關(guān)鍵宏頭文件OOC.H最初的設(shè)計(jì)思想來源于高煥堂教師著的UML+OOP嵌入式C語言開發(fā)精講中的lw_oopc_kc.h。原作中提供了類的封裝和接口,以與在這根底上演化的對(duì)象、信息 傳遞和接口多態(tài)等。本文在其根底上進(jìn)展了符合自己編程習(xí)慣的改良,并增加了繼承機(jī)制。從而OOC中實(shí)現(xiàn)類的封裝、繼承和多態(tài),從而實(shí)現(xiàn)了OO中的三大主要特征?;诖说母咨线€考慮虛函數(shù)的處理方法
12、等。OOC. H的文件內(nèi)容為:/*_- ooc.h */#ifndef _OOC_H#defi ne _OOC_H#i nclude /*默認(rèn)可以動(dòng)態(tài)內(nèi)存分配,如果不使用動(dòng)態(tài)內(nèi)存分配,在#in clude OOC.H 前定義#define OOC_SMALL,或者 #define OOC_STATIC*/#ifndef OOC_SMALL#ifndef OOC_STATIC#defi ne New(type) New_#type() /dynmic mode#defi ne NEW(type) New_#type() /dynmic mode#defi ne DELETE(type) free
13、(type) / free the memory#define DEL(type) free(type)#en dif#en dif/#define CLASS(type)typedef struct type type; struct type#ifndef OOC_SMALL#ifndef OOC_STATIC#ifndef OOC_DYNAMIC#define CTOR(type) void* type#_Sett in g(type*); void* New_#type() struct type *cthis; cthis = (struct type *)malloc(sizeof
14、(struct type); return type#_Sett in g(cthis); void* type#_Sett in g(type *cthis) #else#define CTOR(type) void* New_#type() struct type *cthis; cthis = (struct type *)malloc(sizeof(struct type);#en dif#else#define CTOR(type) void* type#_Setti ng(type *cthis) #en dif#en dif#defi ne END_CTOR return (vo
15、id*)cthis; #defi ne FUNCTION_SET(pfu n, fun) cthis-pfu n = fun;#defi ne IMPLEMENTS(type) type type#define INTERFACE(type) typedef struct type type; struct type/轉(zhuǎn)義定義/#define CLASS_CTOR(type,obj) type#_Setting(&obj)#defi ne EXTENDS(BaseClass) IMPLEMENTS(BaseClass)#defi ne BASE_CTOR(type)CLASS_CTOR(typ
16、e,cthis-type); CLASS_CTOR(A,cthis-A);#defi ne ABSTRACT_CLASS CLASS#defi ne FUNCTION_SETTING FUNCTION_SET/ Virtual是一個(gè)空格,在這里只是提示用,沒有任何意義#defi ne Virtual#en dif/* end */2.1、宏 CLASS(className)CLASS(className)展開后為:typedef struct className className;struct className也就是說:className不僅是個(gè)結(jié)構(gòu)體名,同時(shí)還表示:struct clas
17、sName ;因?yàn)樵?C中定義結(jié)構(gòu)體變量時(shí)候必須有 struct在前,如:struct A用結(jié)構(gòu)體A定義一個(gè)結(jié)構(gòu)體變量 a,應(yīng)寫為:struct A a ;這點(diǎn)和C+結(jié)構(gòu)體定義不同。C+ 的結(jié)構(gòu)體實(shí)際就是一個(gè)特殊的類, 在C+沖變量a的定義為:A a (沒有帶struct)。為了讓宏CLASS() 定義的類(結(jié)構(gòu)體)比擬接近C+中定義的類,把struct 通過typedef方法讓className隱式 包含了 struct 。2.2、宏 CTOR(type),在有動(dòng)態(tài)內(nèi)存分配的情況下,其定義為:#define CTOR(type) void* type#_Sett in g(type*); v
18、oid* New_#type() struct type *cthis; cthis = (struct type *)malloc(sizeof(struct type); return type#_Sett in g(cthis); void* type#_Sett in g(type *cthis) 也就是 CTOR(type)代表了 void* type#_Setting(type*);void* New_#type() 這段代碼,其中已經(jīng)包含了一個(gè)動(dòng)態(tài)內(nèi)存分配函數(shù)和半個(gè)type#_Sett in g(type *cthis);結(jié)合CTOR(type)FUNCTION_SETTING
19、(f1, f2);END_CTOR就可以知道, CTOR()和END_CTOR之間包含了兩個(gè)完整的函數(shù),一個(gè)動(dòng)態(tài)內(nèi)存分配函數(shù) New_type()和構(gòu)造函數(shù) type_Setting().在沒有動(dòng)態(tài)內(nèi)存分配的情況,如此表示void* type#_Sett in g(type*),即半個(gè)函數(shù),組FUNCTION_SETTING (f1, f2); 和END_CTOF組合成一個(gè)完整的函數(shù),也就是實(shí)現(xiàn)對(duì)象與其方法 函數(shù)實(shí)體的關(guān)聯(lián)。2.3、宏 New(type)這是動(dòng)態(tài)對(duì)象分配函數(shù),宏定義為:#define New(type) New_#type()其中#表示連接字符的符號(hào)。比如New(classA)
20、,先是被替換為 New_#classA(),因?yàn)?是連接符號(hào),故變成 New_classA().即為宏定義的動(dòng)態(tài)內(nèi)存分配函數(shù)和構(gòu)造函數(shù),實(shí)現(xiàn)了定義的同時(shí)也構(gòu)造了這很接近 C+的模式了。2.4、宏 CLASS_CTOR(type,obj)定義:CLASS_CTOR(type,obj) type#_Setting(&obj)其實(shí)是void* type#_Setting(type*)宏函數(shù)的另一種寫法,定義該宏主要是把宏和類從一個(gè)字符串中別離出來便于書寫和理解。CLASS_CTO類名,對(duì)象名)一一必須要遵守這個(gè)規(guī)如此,否如此會(huì)出錯(cuò)。2.5、宏 BASE_CTOR(base)定義:BASE_CTOR(
21、base)CLASS_CTOR(base, cthis- base);該宏是在派生類的構(gòu)造函數(shù)內(nèi)用,不能在其他地方使用,也不能獨(dú)立使用。因?yàn)樵摵臧衏this指針。該指針只有在CTOR().END_CTOR之間才能引用,cthis 是CTOR()宏內(nèi)部定義的指針。2.6 宏 INTERFACE( type ) 和 宏 IMPLEMENTS(type)定義:#define INTERFACE(type) typedef struct type type; struct type和CLASS()宏的含義一樣,單獨(dú)定義主要是強(qiáng)調(diào)其定義的是接口。接口對(duì)應(yīng)的實(shí)現(xiàn)的宏是IMPLEMENTS(type),其定義很簡單,就是:#define IMPLEMENTS(type) type type也就是定義一個(gè)結(jié)構(gòu)體變量,這個(gè)結(jié)構(gòu)體類型是type,這個(gè)結(jié)構(gòu)體變量名也是type。第3章:活字印刷一一簡單工廠模式在印刷術(shù)發(fā)明前,人們的印刷書是一個(gè)很艱巨的工程,先是請(qǐng)雕刻師將每一頁的文字刻在木板上, 然后再一頁一頁的印刷。如果在雕刻過程中,錯(cuò)了一個(gè)字或者要改動(dòng)一個(gè)字,該頁面的木板又得重 新雕刻。印刷完畢后,這些雕刻的木板也就沒用扔掉,前面雕刻
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中英語單詞天天記opinion素材
- 2024-2025學(xué)年新教材高中物理第3章機(jī)械波第3節(jié)波的干涉和衍射第4節(jié)多普勒效應(yīng)及其應(yīng)用學(xué)案魯科版選擇性必修第一冊
- 2024-2025學(xué)年高中政治第四單元發(fā)展中國特色社會(huì)主義文化第十課第二框加強(qiáng)思想道德建設(shè)訓(xùn)練含解析新人教版必修3
- 2025監(jiān)理工程師《合同管理》考試預(yù)測題
- 2025年拉薩貨運(yùn)從業(yè)資格證考試模擬題庫及答案
- 2025年德陽道路運(yùn)輸從業(yè)資格證模擬考試年新版
- 2025的建設(shè)工程設(shè)計(jì)合同范本
- 中國櫥具項(xiàng)目投資可行性研究報(bào)告
- 社區(qū)評(píng)估報(bào)告范文醫(yī)療
- 上海商學(xué)院《中小學(xué)心理健康教育課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 第73講:海薩尼轉(zhuǎn)換(HarsanyiTransformation)
- 雙重預(yù)防機(jī)制工作實(shí)施方案
- 用能單位能源計(jì)量器具配備和管理通則GB17167-2006
- 易制毒化學(xué)品購買申請(qǐng)表申請(qǐng)
- 通用機(jī)械設(shè)備管理基礎(chǔ)(共66頁).ppt
- 西方有趣節(jié)日介紹西紅柿節(jié)英文(課堂PPT)
- 綿陽市物業(yè)服務(wù)收費(fèi)管理實(shí)施細(xì)則
- 三年級(jí)作文編寫童話故事(課堂PPT)
- 泵類及液體輸送系統(tǒng)節(jié)能監(jiān)測 泵類及液體輸送系統(tǒng)節(jié)能監(jiān)測計(jì)算表
- 五年級(jí)數(shù)學(xué)上冊《列方程解應(yīng)用題》(課堂PPT)
- 大型商業(yè)綜合體消防安全管理規(guī)則2020年試行
評(píng)論
0/150
提交評(píng)論