关于我应该使用C ++中的标题?

时间:2011-12-26 02:23:01

标签: c++ header-files

关于C ++中头文件的问题:何时应该使用它们。如果我写小程序应该创建头文件还是我可以在.cpp文件中声明我的类?什么是好习惯?如果您提供有关它的文章的链接,那将是好的。我找不到好的。

3 个答案:

答案 0 :(得分:2)

头文件总是一个好主意,但严格来说你不需要它们。特别是在使用多个.cpp文件时,强烈建议使用它们。

我在“总是使用它们”之前使用的规则是:任何可以从其他cpp文件访问其功能的cpp应该使用头文件来“导出”函数

最佳做法:始终使用标题文件。

答案 1 :(得分:2)

当您需要在多个源文件之间共享信息时,请使用头文件。仔细使用的头文件将确保定义某些功能的文件与使用该功能的其他文件之间的一致性。

当程序包含单个(源)文件时,无需创建标头。当程序需要多个源文件(比如两个源文件)时,两个文件之间必须至少有一个函数或变量“共享”(因为如果没有,则其中一个文件将是冗余的)。您应该有一个标题来描述共享函数或变量,以便生产者和消费者就共同的功能达成一致。

结果是标题不应描述功能的消费者不需要的任何内容。仅仅因为实现需要使用一些第二个头,不应该让消费者包含它。如果第二个头提供了接口中使用的定义,那么它确实应该包含在公共头中。

好的 - 很多措辞。一个具体的例子:

source1.h

extern int somefunc(int, int);

source1.cpp

#include "source1.h"

int somefunc(int a, int b)
{
    return a + b;
}

program.cpp

#include <iostream>
#include "source1.h"
using namespace std;

int main()
{
    int x = somefunc(1, 3);
    cout << "somefunc(1, 3) is " << x << endl;
}

这里的标题是确保一切都一致的必要条件。 source1.cppprogram.cpp都必须包含标题以确保一致性。

请注意,如果在somefunc()中定义program.cpp,那么提供标题就没有意义。

现在假设我们修改somefunc()

source1.cpp - 修订

#include "source1.h"
#include <iostream>
using namespace std;

int somefunc(int a, int b)
{
    cout << "a = " << a << ", b = " << b << endl;
    int x = a + b;
    cout << "x = " << x << endl;
    return x;
}

表面上,您可以修改source1.h,因此它包含<iostream>,但这将是一个糟糕的举措。定义的函数somefunc()的界面不依赖于<iostream>,因此标题不应包含<iostream>

答案 2 :(得分:1)

您应该使用头文件的另一个原因 当你分发你的二进制文件时。您将头文件和dll文件提供给客户端。