好的,不确定这是正确的方法还是正确的方法,但我已经看到并开始使用它,假设您有 6 个文件
main.cpp
main.h
car.cpp
car.h
speed.cpp
speed.h
- 第一 - 你应该有一个 main.h 吗?
- 第二 - 如果 main.h 有 #include car.h 和 #include speed.h 那么在 car/speed.cpp 你只需要添加 #main.h (因此它将包括 car/speed.h)
- 第三 - 你应该走那条路吗?
好的,不确定这是正确的方法还是正确的方法,但我已经看到并开始使用它,假设您有 6 个文件
main.cpp
main.h
car.cpp
car.h
speed.cpp
speed.h
#include
极简主义。包含背后的原因应该是,如果删除,代码将无法编译。
#include
当你可以前向声明时不要这样做。如果“A类;” 就够了,不要#include a.h
。
特别是,更喜欢在头文件中进行前向声明,避免生成高度耦合的巨型包含文件的嵌套包含。
另请参阅相关问题中的自给自足的头文件。
1)仅当您需要将某些内容暴露main.cpp
给其他cpp
文件时,这取决于它所具有的内容。
2) 可能但不推荐。
3) 出于多种原因(代码设计、编译时间等),您希望包含尽可能少的内容。此外,它的约定让您的班级拥有 a.h
和 a.cpp
并且一个直接包含另一个。您还应该尝试在.cpp
文件中包含标题,并尽可能避免包含标题的标题。
没有 通常没有main.h
. 我相信在源文件中包含您需要的所有头文件是一种很好的做法,而不仅仅是在头文件中。如果您依赖标头来包含您需要的所有内容,那么标头的更改可能会破坏您的源文件。
第一 - 你应该有一个 main.h 吗?
非常稀有。 main.cpp
意味着它正在编译包含 的翻译单元main()
,这通常是其他低级库的客户端代码,不需要了解main()
. 如果某些事情在您的设计中出现了循环,并且有充分的理由(巨大的时间压力?)不将您要发布的内容拆分为单独.cpp
的main.h
. 这实际上应该只在 main.cpp 中声明其他翻译单元可能需要访问的符号。具体来说,它不应该包含 car.h 和/或 speed.h ,除非公开需要 car.h 或 speed.h 声明的 main.h 函数——例如,在 main.cpp 中声明一个接受类型参数的函数来自 car.h 或 speed.h。
第二 - 如果 main.h 有 #include car.h 和 #include speed.h 那么在 car/speed.cpp 你只需要添加 #main.h (因此它将包括 car/speed.h)
如上所述,这几乎可以肯定是一个非常糟糕的设计:main.cpp 应该直接包含 car.h 和 speed.h,如果它不想这样做并且汽车需要更高级别的头文件。 h 和 speed.h,它应该基于它们的总体主题(例如 transport.h)来命名,而不是以想要访问两者的特定客户端命名。请记住,main.h 只有在需要从 main.cpp 公开内容时才应该存在。
第三 - 你应该走那条路吗?
考虑到我上面解释的内容,可能不会。
拥有“main.h”并不典型——但当然没有禁止它的规则。
至于需要包含哪些内容,以及如何实现这一点,实际上取决于各自的课程做了什么,他们需要什么彼此的知识。
通常认为在您描述的样式中拥有“一个包含其他所有内容的包含文件”是一个坏主意。有几个原因: 1. 很难看出哪个源文件依赖于哪个包含。2. 你会得到更长的编译时间,因为编译器必须通读一堆没有被使用的类定义。3. 你不能轻易地将“car.h”和“car.cpp”粘贴到另一个没有“speed.h”的项目中。
您应该为要在代码中使用的源文件制作头文件。因此它不太可能——不是不可能——你必须创建一个 main.h 头文件,因为在 car.cpp 和 speed.cpp 中你可能不包含你在 main.cpp 中声明的函数。相反,您可能会在 main.cpp 中包含 car.cpp 和 speed.cpp 的功能,因此您希望将它们的标头包含在您的主文件中。