第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C中模擬OO風(fēng)格的多態(tài)?

如何在C中模擬OO風(fēng)格的多態(tài)?

C
翻閱古今 2019-07-30 11:00:58
如何在C中模擬OO風(fēng)格的多態(tài)?有沒有辦法在C編程語言中編寫類似OO的代碼?也可以看看:你能用C編寫面向?qū)ο蟮拇a嗎?C中的面向?qū)ο笸ㄟ^搜索“[c] oo”找到。
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

第一個C ++編譯器(“C with classes”)實際上會生成C代碼,所以這絕對可行。


基本上,你的基類是一個結(jié)構(gòu); 派生結(jié)構(gòu)必須在第一個位置包含基本結(jié)構(gòu),因此指向“derived”結(jié)構(gòu)的指針也將是指向基本結(jié)構(gòu)的有效指針。


typedef struct {

   data member_x;

} base;


typedef struct {

   struct base;

   data member_y;

} derived;


void function_on_base(struct base * a); // here I can pass both pointers to derived and to base


void function_on_derived(struct derived * b); // here I must pass a pointer to the derived class

這些函數(shù)可以作為函數(shù)指針的結(jié)構(gòu)的一部分,因此像p-> call(p)這樣的語法變得可能,但你仍然必須顯式地將指向結(jié)構(gòu)的指針傳遞給函數(shù)本身。


查看完整回答
反對 回復(fù) 2019-07-30
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗 獲得超2個贊

C ++離C不遠(yuǎn)。

類是具有指向名為VTable的函數(shù)指針表的隱藏指針的結(jié)構(gòu)。Vtable本身是靜態(tài)的。當(dāng)類型指向具有相同結(jié)構(gòu)的Vtables但指針指向其他實現(xiàn)時,您將獲得多態(tài)性。

建議將調(diào)用邏輯封裝在以struct為參數(shù)的函數(shù)中,以避免代碼混亂。

您還應(yīng)該在函數(shù)中封裝結(jié)構(gòu)實例化和初始化(這相當(dāng)于C ++構(gòu)造函數(shù))和刪除(C ++中的析構(gòu)函數(shù))。無論如何這些都是很好的做法。

typedef struct{
   int (*SomeFunction)(TheClass* this, int i);
   void (*OtherFunction)(TheClass* this, char* c);} VTable;typedef struct{
   VTable* pVTable;
   int member;} TheClass;

要調(diào)用方法:

int CallSomeFunction(TheClass* this, int i){
  (this->pVTable->SomeFunction)(this, i);}


查看完整回答
反對 回復(fù) 2019-07-30
  • 3 回答
  • 0 關(guān)注
  • 598 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號