八維教育淺談C語言的多態(tài)實現(xiàn)

上傳人:xia****ian 文檔編號:108112815 上傳時間:2022-06-15 格式:DOC 頁數(shù):3 大?。?5.01KB
收藏 版權(quán)申訴 舉報 下載
八維教育淺談C語言的多態(tài)實現(xiàn)_第1頁
第1頁 / 共3頁
八維教育淺談C語言的多態(tài)實現(xiàn)_第2頁
第2頁 / 共3頁
八維教育淺談C語言的多態(tài)實現(xiàn)_第3頁
第3頁 / 共3頁

最后一頁預(yù)覽完了!喜歡就下載吧,查找使用更方便

9.9 積分

下載資源

資源描述:

《八維教育淺談C語言的多態(tài)實現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《八維教育淺談C語言的多態(tài)實現(xiàn)(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、  八維教育淺談C語言的多態(tài)實現(xiàn)  相信很多人都看過設(shè)計模式方面的書,大家有什么體會呢?Bridge,Proxy,F(xiàn)actory這些設(shè)計模式都是基于抽象類的。使用抽象對象是這里的一個核心。其實我覺得框架化編程的一個核心問題是抽象,用抽象的對象構(gòu)建程序的主體框架,這是面向?qū)ο缶幊痰钠毡樗枷?。用抽象?gòu)建骨架,再加上多態(tài)就形成了一個完整的程序。由于C++語言本身實現(xiàn)了繼承和多態(tài),使用這樣的編程理念,在C++中是十分普遍的現(xiàn)象,可以說Virtual(多態(tài))是VC的靈魂。   但是,使用C語言的我們都快把這個多態(tài)忘光光了。我常聽見前輩說,類?多態(tài)?我們用的是C,把這些忘了吧。很不幸的是,我是一個固執(zhí)的

2、人。這么好的東西,為啥不用呢。很高興的,在最近的一些純C代碼中,我看見了C中的多態(tài)!下面且聽我慢慢道來。   1. VC中的Interface是什么   Interface:中文解釋是接口,其實它表示的是一個純虛類。不過我所要說的是,在VC中的Interface其實就是suct,查找Interface的定義,你可以發(fā)現(xiàn)有這樣的宏定義:   #Ifndef Interface   #define Interface suct   #endif   而且,實際上在VC中,如果一個類有Virtual的函數(shù),則類里面會有v,它實際上是一個虛函數(shù)列表。實際上C++是從C發(fā)展而來的,它不過是在

3、語言級別上支持了很多新功能,在C語言中,我們也可以使用這樣的功能,前提是我們不得不自己實現(xiàn)。   2.C中如何實現(xiàn)純虛類(我稱它為純虛結(jié)構(gòu))   比較前面,相信大家已經(jīng)豁然開朗了。使用suct組合函數(shù)指針就可以實現(xiàn)純虛類。   例子:   typedef suct {   void (*Foo1)();   char (*Foo2)();   char* (*Foo3)(char* st);   }   MyVirtualInterface;   這樣假設(shè)我們在主體框架中要使用橋模式。(我們的主類是DoMyAct,接口具體實現(xiàn)類是Act1,Act2)下面我將依次介紹這些“類

4、”。(C中的“類”在前面有說明,這里換了一個,是使用早期的數(shù)組的辦法)   主類DoMyAct: 主類中含有MyVirtualInterface* m_pInterface; 主類有下函數(shù):   DoMyAct_SetInterface(MyVirtualInterface* pInterface)   {   m_pInterface= pInterface;   }   DoMyAct_Do()   {   if(m_pInterface==NULL) return;   m_pInterface->Foo1();   c=m_pInterface->Foo2();

5、  }   子類Act1:實現(xiàn)虛結(jié)構(gòu),含有MyVirtualInterface st[MAX]; 有以下函數(shù):   MyVirtualInterface* Act1_CreatInterface()   {   index=FindValid() //對象池或者使用Malloc !應(yīng)該留在外面申請,實例化   if(index==-1) return NULL;   St[index].Foo1=Act1_Foo1; // Act1_Foo1要在下面具體實現(xiàn)   St[index].Foo2=Act1_Foo2;   St[index].Foo3=Act1_Foo3;   R

6、eturn &st [index];   }   子類Act2同上。   在main中,假設(shè)有一個對象List。List中存貯的是MyVirtualInterface指針,則有:   if( (p= Act1_CreatInterface()) != NULL)   List_AddObject(&List, p); //Add All   While(p=List_GetObject()){   DoMyAct_SetInterface(p);//使用Interface代替了原來大篇幅的Switch Case   DoMyAct_Do();//不要理會具體的什么樣的動作,just do it   }   FREE ALL

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!