C++中,类的定义与实现为什么不是同时在头文件中实现的

爱吃小泉的拉面同学 2017-03-22 09:45:26
刚开始学习C++ ,从书中了解到,定义一个类在头文件中,但是实现却是在另一个.cpp的文件中。为什么不在头文件中直接实现呢。
...全文
722 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒懒的吉他手 2017-03-23
  • 打赏
  • 举报
回复
其实也可以这样写,只是一个头文件可以被多个cpp调用,如果你都写到一起,那调用起来会很麻烦
  • 打赏
  • 举报
回复
也可以在头文件里面实现,内联函数就是在头文件里面实现的
fefe82 2017-03-23
  • 打赏
  • 举报
回复
引用 楼主 xx1959590935 的回复:
刚开始学习C++ ,从书中了解到,定义一个类在头文件中,但是实现却是在另一个.cpp的文件中。为什么不在头文件中直接实现呢。
可以。 你把所有类定义、实现、主程序都放到一个文件也是可以的。 分开主要是其它的考虑(维护成本、编译时间、隐藏实现、等等),不是 C++ 语言本身的要求。
zilaishuichina 2017-03-23
  • 打赏
  • 举报
回复 3
因为头文件是可以公开的,可以给别人看的,cpp最后会生成obj文件,是不给别人看的(其他人是无法通过很方便的查看方式,去直接阅读obj文件的内容的,硬要反汇编破解的除外) 比如你实现了一个很NB的人工智能的类库,提供给其他人使用(有偿的),你只需要把相应的头文件公开给别人就可以了,cpp生成的对应的库文件别人是看不到你到底是怎么实现这套人工智能系统的。你花了很大力气研究出来的很NB的算法,我相信你也不会愿意随随便便就让别人拷贝过去了。 实现是可以写在头文件里面的,只不过你写在头文件中,意味着你怎么实现的这个功能别人一目了然
dragonzxb 2017-03-23
  • 打赏
  • 举报
回复
写错了:static(静态变量)
dragonzxb 2017-03-23
  • 打赏
  • 举报
回复
补充两点:1.static(表态变量),全局变量(具体查单extern关键字)也可写入头文件。 2.内联函数的编译机制很有趣,只是把代码照抄下来,并不编译。所以C++行规要求一般内联函数不超过三行。你可以相像如果是几十行的代码,而内联函数又是频繁调用的,会给编译器带来多大负担。还有一点更有趣,有时候,你用关键字inline设定一个函数为内联函数,但编译器可能不这么认为,他有一定的自主性的。建议你仔细查阅C++ prime(plus)资料有关内容。
gzshun 2017-03-23
  • 打赏
  • 举报
回复
也可以这么写,boost不都是hpp
dragonzxb 2017-03-23
  • 打赏
  • 举报
回复 1
答案的核心是C++的编译机制,一个对象可以声明若干次,但只能定义一次。 头文件本身是给其他文件include的,是不被编译的,简单来说就是把.h文件里的内容全部照抄下来而已。因此尤其是大型程序,就有可能被多个CPP引用。在头文件里进行定义,就会导致多次被编译。 编译器将每个CPP文件单独编译为OBJ文件,而后进行链接,最后生成可执行文件。因此在一个CPP文件里被编译后,被声明的对象如果在本文件里找不到,他就会到其他文件里找。 所以一般程序员都会遵循这个原则,即头文件里只放函数声明、类定义、内联函数(编译器允许为定义)以及const常量(默认为局部文件域)。 当然,只要你不违反编译器的定义的唯一性原则,你也可以把函数定义,类方法的实现放在等等都放在头文件里。
真相重于对错 2017-03-22
  • 打赏
  • 举报
回复
完全可以,只不过那样的话不容易管理
kkil001 2017-03-22
  • 打赏
  • 举报
回复 1
因为编译器不让你重复定义一个函数两次。如果有两个cpp文件都包含一个h文件,而那个h文件里有函数的定义的话,就相当于定义了那个函数两次,编译器就会报错。但是模板类的话又一定要把类成员函数和声明放在一个h文件里,不然会报错

64,654

社区成员

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

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