可能重复:
Can you write object oriented code in C?
Object oriented programming in C
因此,当我得到它时,“对象”基本上只是值和方法的包装器。你不能在C中使用struct
s具有相同的功能吗? struct
似乎就像一个简单的class
,但当然,它没有任何方法。在这里,我们了解了问题的核心:我不明白为什么需要方法。如果我们有一个外部函数,它只是接受了指向struct
实例的指针,它会不会更简单,内存效率更高?或者甚至让struct
指向这些函数的指针,但这看起来纯粹是美学......
答案 0 :(得分:4)
使用c风格的函数指针作为结构成员,您确实可以使C面向对象。
我喜欢将类的属性和方法全部定义在一起的概念。它更容易看到相关实体是什么,而不是像你提到的那样有单独的函数指向结构。
以下是2个相关的SO问题:
答案 1 :(得分:4)
面向对象意味着开箱即用的面向对象。当然,您可以使用C(以及许多其他非OO语言)模拟面向对象,但如果语言(和/或其标准库)无法以任何方式帮助您(特殊语法,标准对象等)和不鼓励默认情况下以OO风格编写,它不会被称为面向对象。
答案 2 :(得分:1)
您建议的内容已经用于在C中实现OO功能。但是很多人发现更容易使用包含OO功能的专用语言。
这与人们从装配切换到C的原因相同。
答案 3 :(得分:-2)
对象是现实世界的实体,它有状态,行为。在类(c ++ / java)中,我们可以将状态定义为成员变量,并将函数定义为行为。对于C:in struct,您可能有状态但不是行为。因此C不是面向对象的。这只是一个小例子。此外,C不支持OOPS原则,如继承,函数重载,多态等。