C如何不面向对象?

时间:2012-05-21 08:31:39

标签: c oop class architecture struct

  

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

因此,当我得到它时,“对象”基本上只是值和方法的包装器。你不能在C中使用struct s具有相同的功能吗? struct似乎就像一个简单的class,但当然,它没有任何方法。在这里,我们了解了问题的核心:我不明白为什么需要方法。如果我们有一个外部函数,它只是接受了指向struct实例的指针,它会不会更简单,内存效率更高?或者甚至让struct指向这些函数的指针,但这看起来纯粹是美学......

4 个答案:

答案 0 :(得分:4)

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

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

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

Is there a simple way to code the strategy (or other) design pattern in ANSI C that would fit on the screen of an 11" MacBook Air?

How do function pointers in C work?

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

这与人们从装配切换到C的原因相同。

答案 3 :(得分:-2)

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