面向对象的ANSI C?

时间:2010-06-18 19:22:37

标签: c oop

  

可能重复:
  Can you write object oriented code in C?

我想知道是否可以使用严格的ANSI C作为面向对象的语言。如果可能的话,我如何在ANSI C中创建一个类。尽管该语言不是为OO设计的,但我真的很想尝试这个。

赞赏任何示例,链接等。

5 个答案:

答案 0 :(得分:6)

C没有通过类直接支持OO,但您可以轻松地模拟它。

如何执行此操作的基础是,您可以创建一个包含数据成员的结构和一个相关的函数列表,这些函数将指向该结构的指针作为它的第一个参数。

More information

答案 1 :(得分:4)

这当然是可能的,虽然我不喜欢这样做。面向对象C的流行方法之一可以在Gnome中使用的GObject架构中找到。这篇文章(以及关于GObject的进一步阅读)应该给你一些想法:

http://en.wikipedia.org/wiki/Gobject

答案 2 :(得分:3)

结构可以包含方法和变量,例如

struct myStructFoo{
    int fooBar();
    int privFooBar;
};

这就是你如何使用普通的旧的ANSI C编译器派生OO“的东西”,如果你想用C ++学习完整的OOP,你会更好地使用ANSI C ++编译器,因为它更适合你的需要。 ..使用C语言的OOP样式是....以这种方式看待它,确保你可以使用一个结构使用一个对象,但名称并不完全......直观...作为{{1}更多用于保存字段,并且是整数数据结构的一部分,例如链表,堆栈,队列等。如果你有ANSI C ++编译器,它的外观如下:

class myFoo{
  public: 
     int fooBar();
  private:
     int privFooBar;
};

比较并看看它看起来更直观,通过structpublic关键字指定信息隐藏。

答案 3 :(得分:1)

实际上正在进行一项名为OOC language的努力,以编写一种面向对象的C语言。它与C略有不同,因此根本不是C语言中的对象,而且我个人从未使用它 - 根据我的口味,它与C相差太远,但它可能值得一看。

有趣的是,在编译之前将“OOC”转换为C.可能值得一看它是如何实现这一点的,因为它将有效地将对象转换为C.我怀疑这将像其他海报提到的那样完成(结构指针等),尽管我还没有看过它。

答案 4 :(得分:0)

有点儿。记住C ++和objective-C都是用C编译器的预处理器一次处理的。最后,你只需要重写c ++