我最初的编程经验都是面向对象语言(Java,Python)。我现在正在学习C,似乎仍然存在类似物体的东西。
比如说,用标准C库创建的FILE
指针。这只是指向struct
的内存位置的指针。这与OO语言中的对象基本相同吗?
现有问题询问struct
和class
之间的区别,但我询问程序如何使用这些内容。通过指针使用或访问struct
,而object
是类的特定实例。从这个意义上说,似乎class
比struct
更通用。虽然我真的只添加了这一段,以防止这些问题被标记为重复,并且它偏离了我原来的问题。
如果FILE
指针实际上与另一种语言中的某个FILE
对象相当,那么" thing"之间的关键区别在哪里?调用FILE
将以面向对象的语言与非面向对象的语言进行处理。似乎线开始模糊。
答案 0 :(得分:1)
在C编程语言中,对象是“执行环境中的数据存储区域,其内容可以表示值”(参见ISO 9899:2011§3.15)。几乎所有东西都是一个对象,包括指针,数组,结构和整数(但不是函数)。
然而,这个概念与大多数面向对象语言中您理解为“对象”的概念不同。值得注意的是,C中的对象没有与之关联的行为,没有类,也没有任何保证。甚至没有保证对象可以代表任何价值。对象只是一点内存。
C等过程编程语言中的典型API设计模式是有一组函数(如fopen
,fprintf
,fclose
,fwrite
等。 )和一组结构类型(如FILE
),用于收集这些函数所需的数据。这些结构与相应行为之间的关联是通过将结构传递给函数来实现的。
您可以使用面向对象语言构建所有内容,包括虚函数调用和类,您只需手动构建所有这些内容。我相信这是C的优势,因为你没有被强制进入某个程序结构,你可以在适当的地方应用面向对象的设计模式,而不是使用其他方法。