C++为什么不要把函数定义都放头文件里

我知道C++里头文件放声明和模块还有类的定义, 而函数定义放在源文件里. 但是为什么要这样做? 许多类的成员函数直接定义在类里面当成inline不是更好吗为什么要分开定义?假如为了代码简洁的话,,,Xcode可以把函数里面的东西全部隐藏的,,,这样平时就看不到了, 而查看不是更方便吗? Ps.源文件里放静态数据的定义我知道为什么.

定义放在头文件里,就不能被多个源文件使用了。

因为源文件用#include指令引用头文件,其实是一个简单的复制粘贴,也就是把头文件内容复制到源文件中#include那一行。如果把定义放在头文件里,且多处引用的话,同一个函数就会被多个源文件重复编译,就会有编译错误了。

这样,你就不能写一些通用的用于重复使用的函数了。追问

我是指类和模块的函数额?不是可以定义在头文件里的吗?

追答

类的成员函数定义如果放在头文件里,有两种情况:


    定义写在类外面,这样就像我在上面说的,不能被多个源文件引用,否则会有编译错误。


    2. 写在类内部,也就是内联函数,这在很多时候会让程序的性能(更慢更占用空间)下降。


所以一般把定义写在源文件中,不写在头文件中。

定义和声明分离是C++的一个特点。如果你用java, C#, python等新一点的语言,就不会有这个烦恼了。

追问

内联函数不是比一般函数更快嘛?为什么会让程序性能下降额?

追答

Search it yourself.

温馨提示:内容为网友见解,仅供参考
第1个回答  2021-03-09

要害主要还是在头文件定义类会暴露具体的实现方法,而在matlab这种软件的一些自带矩阵运算函数都是经过他们公司的研究实现的最高效的算法,涉及到知识产权,源代码自然不会给你看,这时候只提供给你编译好的库文件和头文件就能避免泄露,至于重新编译头文件没什么影响,因为头文件还有库这些文件一般都是由供应商编译好提供给你的,套用就行。

第2个回答  2014-12-27
头文件提供类的结构,而类的实现不放在头文件是为了不将类的实现暴露出来在最后提供给用户的API,可是头文件和库的形式,这样,你的实现过程不再暴露,而接口也提供了
第3个回答  2014-12-28
内联。。。一般只是用在短而常用的函数
第4个回答  2014-12-27
C++的编译时间已经饱受诟病了……追问

在编译里花时间不是比在运行里花好吗???

C++为什么不要把函数定义都放头文件里
定义放在头文件里,就不能被多个源文件使用了。因为源文件用#include指令引用头文件,其实是一个简单的复制粘贴,也就是把头文件内容复制到源文件中#include那一行。如果把定义放在头文件里,且多处引用的话,同一个函数就会被多个源文件重复编译,就会有编译错误了。这样,你就不能写一些通用的用于重复...

C++中声明的一个函数放在了头文件中,在源文件编译时能够正确的调用吗...
能。但在头文件中直接写入函数定义,将导致函数定义被多次编译,而且没有规范要求优化也就是消除这种重定义,这会导致例如函数指针、静态变量在内的一些意外bug。另外在一个代码文件中多次引用而且不加保护,可能会导致函数重定义编译错误。所以这是一个不规范的做法,在实际开发中应严格避免。

关于C++函数声明?
1、函数的作用域只是从定义的地方开始的。也就是说,在函数定义行之上,你是无法使用该函数的。而把函数的定义都放在主函数之前的话,程序会变得不清楚。所以在使用前只需用一行声明一下就可以了,明了。2、也许函数并不都是在一个文件里使用,这时候,如果再定义一遍,不仅显得罗嗦,而且使程序的...

C++调用类头文件为什么只需要include声明部分而不需要类的定义部分
由于C++语言支持多文件工程。需要经过编译和连接的过程。打个比方,你要建造一架飞机,需要发动机,机翼,机身,尾翼,起落架。你可以把这几个部分交给专门的厂商去制作,这就是编译过程。这么多零件交给你,你只需要组装起来就可以了,这就是连接过程。编译器(比如VC)就是加工零件的工厂,通过编译器的...

C++中的自定义函数,必须放在主函数前吗?
回答:自定义函数在main函数之前,头文件之后声明。 也可以在main函数里面声明。 在main函数中能直接使用。

C++函数的定义可以放在头文件中的吗(不是内联函数)?我听老师说过不可 ...
不可以。需要在 C文件声明 h文件 用extern声明 别的C文件包含该H文件就可以用声明的函数了

C++中关于#include,文件保护和符号重定义
同一个头文件不会被两次include 而你的问题是,在两个cpp文件内都include了这个头文件。头文件中应该只放函数的声明而不能放函数的定义,如果放了定义,就像你写的那样,两个cpp文件include了这个头文件,那么就会出现两次定义的问题。可以重复声明不能重复定义,所以会报错。

C++构造函数的定义
”一般来说在头文件中不能定义函数“ 这个貌似理解有错误。定义函数都是放在头文件.h的,而实现是可以放头文件.h,也可以放在.cpp文件的。一般来说是用函数声明,函数实现来表述的,而函数定义是等于函数声明的。\/\/ Test.hclass Test{ void print(); \/\/ 声明};\/\/ Test.cppvoid Test::print...

c++为啥类的成员函数可以这样在类外定义
不是可以在类外定义,而是最好在类外定义。C++有头文件和源文件,头文件放声明,源文件放定义。如果在头文件中定义,当项目比较大而复杂的时候也即头文件相互包含的时候,编译时会报重复定义的错误。

C++中对自定义函数的声明,放main内还是外,在含类的程序中,貌似只能在...
一般放在函数外,调用之前。放在哪跟有类没类没有直接联系。实践中一般将函数声明、类的定义放在头文件中。而定义放在单独的源文件(.cpp)。如果有哪个源文件中用到了头文件中声明的函数或类,只需#include “***.h”将头文件包含进来。

相似回答