但是我们有时候会遇到这样的一个问题a.cpp 要调用b.cpp中的函数,而b.cpp又要调用a.cpp 的函数 。这就牵扯到相互调用 这是如果我们把b.h中包含a.h, a.h中包含b.h。这是后编译会出现问题。解决的办法是将a.h包含在b.cpp中,将b.h包含在a.cpp中。这样就能解决问题。
很简单,如果想提供给其他模块,就在头文件中定义,如果只是一个单独的CPP文件中用到,基于封装原则,定义在CPP文件里为好。
这和以下原则类似:
1. 类的成员能 private 就 private
2. 函数能 static 就 static
虽然这些对于程序的编译执行结果没甚影响,但维护时可以一眼看出来这些东西不会在别的地方被引用到,缩短调试耗时。
先说后者。对于可以static的函数不去static,几乎纯粹是性能上的浪费??因为就算有需要要改成非static也不会费多少事(相比前者而言)。
但访问权限控制不同。首先,这里的语义不是运行时检查的,所以“不需要修改”就是最合适的的概率比较小。而private要修改成protected/public的风险是相当大的,在重构中不太容易修改(即使每次通读代码也完全无法保证这次修改后不会对之后的维护产生误导;相比之下,public改成private之类如果有问题一编译就检查出来了)。预先在并非逻辑上要求必须private的地方用private,变相拒绝代码在之后版本的修订,这其实也是很浪费的。至于“一眼看出来这些东西不会在别的地方被引用到”,还不如直接写文档清楚。