用C编写面向对象代码有哪些方法?特别是在多态性方面。


另请参阅此堆栈溢出问题C中的面向对象。


当前回答

当然,它不会像使用带有内置支持的语言那样漂亮。我甚至写过“面向对象的汇编程序”。

其他回答

你可以使用函数指针来伪装它,事实上,我认为理论上可以将c++程序编译成C语言。

然而,将一种范式强加于一种语言,而不是选择一种使用范式的语言,很少有意义。

面向对象的C,可以做到,我在韩国看过这种类型的代码,这是我多年来见过的最可怕的怪物(这是去年(2007年)我看到的代码)。 所以,是的,这是可以做到的,是的,人们曾经这样做过,甚至在这个时代仍然这样做。但我还是推荐c++或Objective-C,这两种语言都起源于C,目的是用不同的范式提供面向对象。

添加一点OOC代码:

#include <stdio.h>

struct Node {
    int somevar;
};

void print() {
    printf("Hello from an object-oriented C method!");
};

struct Tree {
    struct Node * NIL;
    void (*FPprint)(void);
    struct Node *root;
    struct Node NIL_t;
} TreeA = {&TreeA.NIL_t,print};

int main()
{
    struct Tree TreeB;
    TreeB = TreeA;
    TreeB.FPprint();
    return 0;
}

这个问题的答案是“是的,你可以”。

面向对象的C (OOC)工具包是为那些希望以面向对象的方式进行编程的人准备的,但它也沿用了优秀的老C。OOC实现了类、单继承和多继承、异常处理。

特性

•只使用C宏和函数,不需要语言扩展!(ansi c)

•易于阅读的源代码为您的应用程序。小心翼翼地使事情尽可能简单。

•类的单一继承

•通过接口和mixin进行多重继承(从1.3版开始)

•实现异常(纯C!)

•类的虚函数

•易于类实现的外部工具

欲了解更多详情,请访问http://ooc-coding.sourceforge.net/。

当然,它不会像使用带有内置支持的语言那样漂亮。我甚至写过“面向对象的汇编程序”。