1

可能重复:
你能用 C 编写面向对象的代码吗?
C中的面向对象编程

因此,据我所知,“对象”基本上只是值和方法的包装器。你不能在 C 中拥有与structs 相同的功能吗?Astruct看起来就像一个简单的class,但是,当然,它没有任何方法。在这里,我们进入了我的问题的核心:我根本不明白为什么需要方法。如果我们有一个外部函数,它只接受一个指向 a 实例的指针,难道不是更简单、更节省内存struct吗?或者甚至让structs 有指向这些函数的指针,但这似乎纯粹是美学......

4

4 回答 4

5

面向对象意味着开箱即用地面向对象。当然,您可以使用 C(以及许多其他非 OO 语言)模拟面向对象,但如果该语言(和/或其标准库)不能以任何方式帮助您(特殊语法、标准对象等)和默认不鼓励写OO风格,不会被称为面向对象的。

于 2012-05-21T08:45:27.487 回答
4

使用 c 风格的函数指针作为结构成员,您确实可以使 C 面向对象。

我喜欢将一个类的属性和方法都定义在一起的概念。它更容易看到相关实体是什么,而不是像你提到的那样拥有指向结构的单独函数。

以下是 2 个相关的 SO 问题:

是否有一种简单的方法可以在 ANSI C 中编写适合 11 英寸 MacBook Air 屏幕的策略(或其他)设计模式?

C 中的函数指针是如何工作的?

于 2012-05-21T08:34:43.813 回答
2

您的建议已经用于在 C 中实现 OO 功能。但是许多人发现使用包含 OO 功能的专用语言更容易。

这与人们从汇编转向 C 的趋势相同。

于 2012-05-21T08:35:53.227 回答
-2

对象是现实世界的实体,它具有状态、行为。在 class(c++/java) 中,我们可以将状态定义为成员变量,将函数定义为行为。在 C: in struct 的情况下,您可能有状态但没有行为。因此C不是面向对象的。这只是一个小例子,例如 C 也不支持 OOPS 原则,如继承、函数重载、多态等。

于 2012-05-21T08:38:58.190 回答