类的成员函数放在头文件中定义和放在源文件的区别是什么?

inauage 2007-07-05 10:24:00
rt.
悉心请教.
...全文
1647 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Laura_li 2008-11-10
  • 打赏
  • 举报
回复
确实是啊! 我也在看这本书
好书啊
KenYuan2016 2007-07-09
  • 打赏
  • 举报
回复
产生的结果就是自动内连。
KenYuan2016 2007-07-09
  • 打赏
  • 举报
回复
林锐
² 【建议1-2-1】头文件中只存放“声明”而不存放“定义”

在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

inauage 2007-07-09
  • 打赏
  • 举报
回复
看看B.S书上说是这样的:
一个类、模板或者在线函数的两个定义能够被接受为同一个惟一定义的实例,当且仅当
[1]它们出现在不同编译单位里。
[2]它们按一个个单词对应相同:
[3J这些单词的意义在两个编译单位里也完全一样。

看来类的定义和变量的定义还是有些不同的,说明可以“重复定义“,只要在不同地方定义的形式是一样的。
jxlczjp77 2007-07-09
  • 打赏
  • 举报
回复
我的理解是:
如果函数在头文件中定义(假设这个头文件叫a.h),那么当这个函数有改动时,所有包含了a.h文件的.cpp文件将全部需要被重建,如果这个头文件被多次引用的话,带来的副作用将非常的大。
但如果函数不在.h中定义的话,则改动带来的副作用将小得多,只有当前改动的文件从新编译一下即可了
jxlczjp77 2007-07-09
  • 打赏
  • 举报
回复
我的理解是:
inauage 2007-07-06
  • 打赏
  • 举报
回复
哦,了解。我做实验的时候头文件只包含了一次,所以成员函数定义在头文件中也没问题。
看来“单一定义规则“还是没错的,除了某些特殊情况。谢谢诸位。
Inhibitory 2007-07-06
  • 打赏
  • 举报
回复 1

成员函数一般是不可以在头文件中定义的,只能在头文件中声明。因为函数只能有一次定义,而可以有多次声明,当头文件被多次包含的时候,如果头文件中有函数定义就违背了这个原则~
-------------------------------------------------------------------------------------

#ifndef XXX_H
#define XXX_H
class CA {
......
}
#endif
如果头文件中没有这样定义的话,多次包含一样编译不通过.

成员函数在不在头文件中定义,其实都没多大关系,但如果你的程序是提供给别人作为库,而在头文件中定义成员函数,别人就会看到你程序的实现,在.cpp中定义,人家使用时调用的是库文件,看到的只是你的头文件中的声明,而不知道你是怎么实现的(呵呵,商业机密).
还有一些规则是,有些成员函数是必须在类声明中定义的,如类的静态成员函数,inline函数.
canybox 2007-07-06
  • 打赏
  • 举报
回复
没区别,也可以放在头文件中,比如INLINE的
totoorange 2007-07-06
  • 打赏
  • 举报
回复
成员函数一般是不可以在头文件中定义的,只能在头文件中声明。因为函数只能有一次定义,而可以有多次声明,当头文件被多次包含的时候,如果头文件中有函数定义就违背了这个原则~

所以,成员函数一般都在头文件中声明,而在源文件中定义~
Inhibitory 2007-07-06
  • 打赏
  • 举报
回复
其实还不止这些,还有一个关于不在头文件中实现类的定义的是编译时的速度问题:
在头文件中尽量不在包含其他的头文件,而如果要用到其他的类时,在类的外部声明一下所用类的名字,然后把与之相关的头文件包含在类的实现文件中,即.cpp文件中,否则每次编译的时候都要去编译所用到的头文件.

呵呵,其实我也是比较糊涂,原因也不是太明白,但在高质量C++编程中好像就这么说过,反正就是尽量把头文件与实现文件分开.

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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