原文:https://blog.csdn.net/xueruifan/article/details/50569639ios
现有两个文件Test.h 和Test.cpp #include <iostream>在Test.h中包含 和在Test.cpp中包含有什么区别?
一、在cpp文件中包含.h文件,要么你要用到这个头文件中的函数或者类,要么就是实现这个头文件;
二、.h ---就是为了放一堆声明所产生的东西。 若是是定义放在.h中。 若是.h被重复包含屡次,那么则会被报重定义。因此在.h 中都要---若是函数就要是inline ,若是是变量就要 selectany (windows)才不会被报错。
三、#include尽可能写到cpp文件里。两个文件在.h文件里相互include,就会产生编译错误,而两个文件在.c文件互相include,就不会有该问题,所以在.h文件include就要避免互相包含的问题,而.cpp文件就不须要考虑
四、1)在 .h 里面 include 的好处是:
若是不少.c,.cpp文件,都包含一批头文件,
若是复制很容易遗漏
若是输入,很容易出错
若是所有在一个.h, include 那么每一个.c,.cpp文件只须要一个#include 语句
这样不只输入量减小,
并且代码也美观多了
代码也主次分明了
毕竟,.c.cpp, 里面
要实现的函数,才是主要代码
2)主要缺陷,
可能会包含彻底不须要的头文件,
增长编译工做量
五、若是你在a.h头文件中include了“stdio.h”,“iostream”,……一大堆
那么你的a.cpp源文件只要include你的a.h,就至关于include了“stdio.h”,“iostream”,……一大堆
可是当其余文件include你的a.h的同时也就包含了“stdio.h”,“iostream”,……一大堆
这个要看你我的须要,若是你须要让其余文件也include一大堆,那么写在a.h中就能够,其余文件包含a.cpp简单整洁无脑
若是只有a.cpp须要include一大堆,那么仍是建议在a.cpp中include一大堆
六、若是a.c包含了头文件a.h,a.h包含了头文件b.h,b.c也包含了b.h,那么当b.h发生改变时,a.c和b.c都会从新编译
也就是全部包含了b.h的都会从新编译,不管是直接包含,仍是间接包含
七、2点原则:
第一个原则:若是能够不包含头文件,那就不要包含了,这时候前置声明能够解决问题。若是使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就能够了。由于指针这一数据类型的大小是特定的,编译器能够获知(C++编译器自上而下编译源文件的时候,对每个数据的定义,老是须要知道定义的数据的类型的大小) 第二个原则:尽可能在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类 B的前置声明并编译成功,那么在A的实现中咱们须要访问B的具体成员,所以须要包含头文件,那么咱们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H文件)windows