标题和cpp或只是cpp文件 - 最佳做法?

时间:2012-02-04 11:52:28

标签: c++

环顾不同的代码库,我看到了各种各样的风格:

  1. 头文件中定义的类“接口”和cpp文件中的实际impl。在这种方法中,标题看起来定义良好且易于阅读,但cpp文件看起来很混乱,因为它只是一个方法列表。

  2. 我看到的第二种方法就是将所有内容放在单个类cpp文件中。这些类文件包含类定义主体中的定义和实际方法。这种方法对我来说看起来更好(更像是Java和c#)。

  3. 我应该使用哪种风格?

7 个答案:

答案 0 :(得分:7)

对于除了最简单的程序以外的所有程序,样式#2根本不可能。如果#include .cpp个文件包含来自多个其他.cpp文件的函数定义,则定义会添加到多个目标文件(.o / .obj)和链接器会抱怨冲突符号。

使用风格#1并学会忍受混乱。

答案 1 :(得分:4)

前者 - 头文件中的接口和实现文件中的类主体。你会发现这可以减少你在大型系统上工作时遇到的问题。

In C++ why have header files and cpp files?

答案 2 :(得分:0)

由于您使用c ++标记,请转到第一种样式。我觉得它并不令人困惑,对于Java程序员来说,它可能看起来有所不同,但在C ++中,你总是会使用这种方法。

实际上在我最喜欢的IDE(MSVS)中,我打开头文件和cpp文件并排。使查找原型和类声明变得容易。

当你有十几节课时;十几个.h文件和另外十几个.cpp文件,将使您的工作更简单。因为,当你想要看到,类是什么时,你只需要打开相关的.h文件,看一下班级成员,或者简短的评论。你不需要涉及几行深度代码。

结论:您提供的样式选项仅适用于小代码,通常是单个文件,只有很少的方法等。否则,它甚至不是一个选项。 (@Thomas已经说明了#2甚至不是一个选项的原因)

答案 3 :(得分:0)

C ++不使用“接口”,它们使用类 - 基类/派生类。如果项目很小,我使用一个文件来定义类/及其实现方法,如果项目很大,我使用单独的文件。 在java中,我将它们打包到一个包中,然后在需要时导入它。

答案 4 :(得分:0)

标题(HPP):
标头包含代码的声明,特别是函数声明。从技术上讲,类在头文件中被定义,但同样,成员函数只是声明了。

其他文件中的代码仅包含此标题,并从那里保留所有必要信息。

实施(CPP):
实现包括函数,成员函数和变量的定义。

理由:

  • 标题文件为开发人员(代码的外部用户)提供了简单概述,只提供外部可用代码(即易于阅读,仅提供用户所需的信息)。
  • 头文件允许编译器检查实现的正确性
  • 头文件允许编译器检查外部代码的正确性
  • 标题文件允许单独编译。你需要记住。以前,计算机没有足够的资源在编译过程中将所有内容保存在主内存中。头文件很小,而实现文件很大。

使用#style 1,即使对于简单程序也是如此。因此,您可以轻松学习如何使用。今天看起来可能看起来很不对劲,特别是在现代Multi-Pass-Compilers的背景下。但是单独的头文件甚至在今天都是有益的。关于下一个C ++ - Standard的谣言应该出现,据我所知,像符号导出(Java或C#)这样的东西是可能的。但是不要指责我!

注意:
   - 在课堂内定义的成员函数默认为内嵌,通常您不希望这样    - 使用始终定义的警卫

答案 5 :(得分:0)

如果您正在开发大型项目,您会发现第一种方法可以帮助您。第二种方法可以帮助您完成小项目。随着您的项目变得越来越大,复杂性的管理是软件开发的一个大问题,第一种方法是更好的选择。

答案 6 :(得分:0)

我的工作是:

这样我得到:

  • 快速编译(只需重新编译.cpp文件,除非我更改类接口)
  • 圆形声明的几个问题
  • 可接受的低级乏味无意识的手工作业: - )