.h(头文件)和.cpp文件有什么区别?

时间:2010-07-04 06:13:30

标签: c++ windows winforms

我正在创建一个windows:forms应用程序。我已经阅读了一些答案,试图理解.h(头文件)&的概念。 .cpp(实现文件)。当我为我的应用程序创建GUI时。我注意到代码放在.h文件中。但是,当我双击按钮控件以向过程添加代码时,代码是在.h文件而不是.cpp文件中创建的。我是否将此代码剪切并放入.cpp文件中,或者这是链接进来的地方?过程deffintion保留在.h文件中,并将链接到.cpp文件中的过程代码。

5 个答案:

答案 0 :(得分:3)

正如其他人所说,头文件用于类,函数,类型等声明,而.cpp文件应该包含函数的实现。但是,编译器并不关心编写实现代码的位置,因此您可以将所有代码放在标头本身中。但这样做会增加编译时间,因为所有代码都将编译在包含该头文件的每个文件中。

如果要分发代码但需要隐藏专有代码,保持实现分离非常有用。在这种情况下,您可以从实现代码创建一个库,并将标题与库一起分发。

例外情况是编写模板代码时;在这种情况下,实现必须进入头部,因为编译器需要在调用点“看到”它。

答案 1 :(得分:3)

这里有两个注意事项。首先,头文件在托管代码中并不像在本机C或C ++中那么重要。托管代码编译器从程序集元数据中读取声明,您不会(也不应该)编写需要在头文件中的其他模块中可见的C ++ / CLI类型声明。从元数据中获取它们使您的类型可用于任何 .NET语言。

但真正的原因是因为表单设计器在C ++ IDE中的工作方式。它是一个代码生成器,由您在表单或用户控件上放置的控件以及在“属性”窗口中设置的属性驱动。如果代码生成器需要在两个单独的文件中生成代码,则存在一个非常棘手的问题。与其说是生成位,而是在更改表单设计时删除代码。使文件不同步会导致难以从自动生成的代码中诊断编译错误。它比你想象的更有可能发生,代码生成器需要处理正在编辑的源代码文件。非常困难,代码可能根本无法解析。

C ++ IDE使用1.1版C#和VB.NET设计者采用的原始方法,所有内容都在一个文件中。当然,这是不愉快的,声明和代码不应该混在一起。通过为部分类添加对C#和VB.NET语言的支持,在2.0版本的设计器中解决了这个问题。然而,C ++ / CLI没有发生这种情况。不确定原因,与其他团队相比,C ++ / CLI团队总是看起来资源有限。它也没有任何重构支持,当类名更改时重命名方法非常非常重要。保持内联方法避免了这个问题。

Anyhoo,您可以在.cpp文件中获取代码,但您必须自己完成。剪切+粘贴完成它,但您还必须将类名称编辑回方法声明。这是高维护,考虑是否值得努力。还要考虑您是否真的想要使用C ++ / CLI进行UI,这是一种不常见的选择。

答案 2 :(得分:1)

函数原型(您称之为过程定义)应该放在头文件中(以及宏)。任何代码都应该放在.cpp文件中。

如果你确定你想要移动的是代码,它应该被移动到那里。粘贴一些代码会有所帮助。

答案 3 :(得分:1)

标头(* .h)文件假设包含类,方法和类型的定义,而cpp文件假设具有实现细节。在头文件中也常常使用内联和短方法。

编译器不强制执行此操作,因此您可以在头文件中编写实现(即代码)。

答案 4 :(得分:0)

我个人将自动生成的代码移动到* .cpp文件。在* .h文件中,我要离开的功能不会经常更改。我这样做是为了确保在我做出的每一次改变之后,编译时间不会增长太多。