由面向对象想起的:关于头文件.h和类class的一点疑惑

eudemon_cn 2011-01-01 01:22:09
都说类是面向对象的特征,在浅学了一段时间,让我想起了C里的头文件。

我个人是这样理解的:头文件里包涵的是各种功能函数。在使用的时候,通过预处理指令把他们包涵进来。
类包涵的也是功能函数,还有所谓的属性变量。在使用的时候是通过声明定义的方式。

在这一点上是否可以说明头文件和类是一样的呢?或许是叫法的不同?总觉得它们之间有种相似的地方也感觉有不同的地方,可是就是想不明白到底是哪里?请熟悉的人给予帮助~~谢谢!!
...全文
211 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
harleypang 2011-01-18
  • 打赏
  • 举报
回复
头文件和类可是两种概念,别混淆了!

类是对具体事物的共同特征的抽象;

而头文件一般是定义函数声明,全局函数等,当然,类的定义一般也可以放到头文件中。
ForestDB 2011-01-18
  • 打赏
  • 举报
回复
LZ还是多写点代码先吧。
BuleRiver 2011-01-05
  • 打赏
  • 举报
回复
还是很不一样的。写的代码多了就知道了。
eudemon_cn 2011-01-05
  • 打赏
  • 举报
回复
其实,我最初的意思,仅仅是觉得,类和头文件单纯在代码的组织上有点像。都是函数(方法)变量(属性)的集合。在使用上,个人感觉也有点类似,头文件里的函数是通过包涵进来,或者是通过.引用。类是通过创建实例和.引用。我是单纯从这个角度上理解,感觉有点类似。至于OO和过程,不是在我想的范围里。不过感谢各位的热情解答和帮助!
ForestDB 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 eudemon_cn 的回复:]都说类是面向对象的特征,在浅学了一段时间,让我想起了C里的头文件。

我个人是这样理解的:头文件里包涵的是各种功能函数。在使用的时候,通过预处理指令把他们包涵进来。
类包涵的也是功能函数,还有所谓的属性变量。在使用的时候是通过声明定义的方式。

在这一点上是否可以说明头文件和类是一样的呢?或许是叫法的不同?总觉得它们之间有种相似的地方也感觉有不同的地方,可是就是想不明白到底是哪里?请熟悉的人给予帮助~~谢谢!!
[/Quote]
面向对象是一种思想,封装,继承和多态是其核心特征;
这就是说,就算是C语言,如果能够很好的表现出这三个特征,我们也可以说它的代码是OO的;
当然,直接用class这样第一类(first class)的类型来构造OO,是最直接,效果最好的。

至于头文件,不过只是编译过程的一种实现,来达到接口(函数声明都在头文件里面,提供功能原型)和实现(具体的函数的定义放在C文件里面)的分离,C++的头文件和实现文件也是如此。关于这个,可以好好的看看编译的过程。

处理LZ疑惑的最好的方法,就是不要把两个完全不同领域的东西放在一起思考,各自看看各自的那块(这里要看的就是OO的思想以及某种具体表现比如C++,另一个要看的就是编译的过程),当各自相关的都比较清楚的理解后,就是融会贯通的时候,也不会提这样的问题了。
ForestDB 2011-01-04
  • 打赏
  • 举报
回复
OO只是种思想,封装,继承和多态是其核心特征;
这就是说,就算是C语言,如果能够很好的表达上述特征,我们也可以说它的代码是OO的;
当让,用class这样第一类的类型来构造OO当然是最直接有效的。

头文件是编译过程中,用来分离接口(头文件中只有函数的声明,用来提供功能原型)和实现(C文件中提供函数的具体定义即实现)的一种手段,C++的头文件和实现文件也是如此。具体的建议看看编译的过程(我的博客中有篇关于hello world的解析)。

解决LZ的疑惑的最好的方法,就是不要把两个完全不同领域的东西拿来比较,一是去看OO思想及其某种实现比如C++,一是去看编译的过程,当两种都有了比较清晰的理解之后,就是融会贯通的时候,也不会提出这样的问题了。
wonder2008 2011-01-02
  • 打赏
  • 举报
回复
你这样理解也接近了点,不过不要忘了还有某些抽象类只包含了纯虚接口而没有任何具体实现。

从类的概念的描述就可以很好的理解这个东西:
就是具有相同属性和方法的对象的统称。

在没有实例化对象之前,这个类的属性和方法还都是死的;
当然某些抽象类是不能被实例化对象的;
被实例化的对象才具有相应各自独立的属性,以及根据他的不同的方法参数不同的行为。
eudemon_cn 2011-01-01
  • 打赏
  • 举报
回复
那么说,类应该是接口的具体实现?这样理解可以吗?
wonder2008 2011-01-01
  • 打赏
  • 举报
回复
不要把具体的东西跟抽象的东西混淆开来:

头文件是定义各种接口的地方,是个具体的东西,打个比方说就像是书目的东西,你可以通过包含这个书目知道你可以找到什么书,但是你并不知道每本书里面的具体内容。

而类是个抽象的东西,只不过这些抽象的接口也放到具体的头文件当中了。
eudemon_cn 2011-01-01
  • 打赏
  • 举报
回复
要是这样的话,我可否理解成类应该算是头文件“加强版”了,相当于对头文件的扩展,因为它引进了新定义,比如您说的,封装,继承等等……
  • 打赏
  • 举报
回复
你的感觉也是对一些的,但是你需要了解的是面向对象的实质,比如封装、继承和多态等,但是不管怎么样的面向对象设计,最终的具体实现都是过程化的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧