如何在C中模拟OO风格的多态?

如何在C中模拟OO风格的多态?

有没有办法在C编程语言中编写类似OO的代码?


也可以看看:

通过搜索“[c] oo”找到。


翻阅古今
浏览 572回答 3
3回答

慕田峪4524236

第一个C ++编译器(“C with classes”)实际上会生成C代码,所以这绝对可行。基本上,你的基类是一个结构; 派生结构必须在第一个位置包含基本结构,因此指向“derived”结构的指针也将是指向基本结构的有效指针。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 basevoid function_on_derived(struct derived * b); // here I must pass a pointer to the derived class这些函数可以作为函数指针的结构的一部分,因此像p-> call(p)这样的语法变得可能,但你仍然必须显式地将指向结构的指针传递给函数本身。

慕婉清6462132

C ++离C不远。类是具有指向名为VTable的函数指针表的隐藏指针的结构。Vtable本身是静态的。当类型指向具有相同结构的Vtables但指针指向其他实现时,您将获得多态性。建议将调用逻辑封装在以struct为参数的函数中,以避免代码混乱。您还应该在函数中封装结构实例化和初始化(这相当于C ++构造函数)和删除(C ++中的析构函数)。无论如何这些都是很好的做法。typedef struct{    int (*SomeFunction)(TheClass* this, int i);    void (*OtherFunction)(TheClass* this, char* c);} VTable;typedef struct{    VTable* pVTable;    int member;} TheClass;要调用方法:int CallSomeFunction(TheClass* this, int i){   (this->pVTable->SomeFunction)(this, i);}
打开App,查看更多内容
随时随地看视频慕课网APP