(C ++).h文件中的全班?

时间:2010-09-28 07:11:07

标签: c++ header

如果我正在创建一个功能较少但没有做太多功能的类,那么将它们全部放入头文件是否可以接受?所以对于一个特定的类,它只是.h而没有.cpp。

5 个答案:

答案 0 :(得分:6)

是的,这是可以接受的。它肯定会编译。但是,如果它使代码组织更清洁,那么这可能是好的。大多数模板定义已经非常必要,所以你没有做任何闻所未闻的事情。但是,该类依赖于其他类可能存在一些缺点。如果您最终必须将整个定义包含在使用该类的其他文件中,则与仅具有简短的类声明相比,可能会产生额外的编译时间。

如果这似乎是一个真正的问题,你可以衡量你的编译时间。

如果您可以获得副本,The c++ Programming Language(和许多其他书籍)都有一个关于源代码组织的详细部分以及将代码分成.h和.cpp文件的特定好处。

答案 1 :(得分:3)

这取决于你的目标。

对于宠物项目来说,这是可以接受的,但事实确实如此。

对于一个真实的项目,你需要问自己一些问题:

  • 你有几个依赖? (是)
  • 您的逻辑/实施可能会经常变化吗? (不,或看下一个问题)
  • 多少取决于这门课程? (不多或多,但不会改变)

如果回复满足您,请继续。

主要是依赖管理问题。通过将方法定义放在头文件中,它们可能会被编译器内联,这意味着每次更改时,您都必须重新编译依赖于此类的所有内容。

模板这样做,但模板通常具有很少的依赖关系(其他包括),并且您相对被迫继续这样做(尽管您可以外部化非模板相关代码以减少依赖关系)。

对于依赖管理最重要的真正大项目,我会建议反对。在这些项目中,稳定的ABI和促进二进制兼容更改的能力可以解决问题,并且非常值得为开发人员带来“轻微”不便。

在任何情况下,请不要在课程中定义方法。即使内联,您也可以在类声明后定义它们。这使得阅读它的人(自己在几个月内)更容易掌握界面。

答案 2 :(得分:2)

是的,这是可以接受的。此外,如果您执行模板并且没有支持export的编译器,那么您将无法选择。

但请注意,它会增加依赖性,从而使编译速度变慢。

答案 3 :(得分:2)

如果您将在未来的代码或项目中使用该头文件,并且想要与其他代码或项目共享,那就没关系了。

答案 4 :(得分:0)

取决于您的链接方式。为了避免必须看到诸如重新定义blah之类的消息,第13行的文件blah.h中的先前定义只是将声明中的所有内容放在.cpp中。