我应该同时使用头文件和cpp/源文件吗?

Should I use both header files and cpp/source files?

本文关键字:cpp 源文件 文件 我应该      更新时间:2023-10-16

我有一个哺乳动物.h文件,上面写着:

#ifndef MAMMAL_H
#define MAMMAL_H
class Mammal
{
public:
    void Speak();
};
#endif

我的CPP文件如下:

#include "stdafx.h"
#include "Mammal.h"
#include <iostream>
void Mammal::Speak()
{
    using namespace std;
    cout << "Speaking";
}

我对这段代码的使用如下:

#include "stdafx.h"
#include "Mammal.h"
int main()
{
    Mammal *mammal = new Mammal();
    mammal->Speak();
}

但是,我可以在头文件中这样做:

#include "stdafx.h"
#include <iostream>
#ifndef MAMMAL_H
#define MAMMAL_H
class Mammal
{
public:
    void Speak()
    {
        using namespace std;
        cout << "Speaking";
    }
};
#endif

我还没有真正定义一个偏好…但我确实看到两者都有效。这两种方法各有优缺点吗?

尝试从多个地方调用该代码—因此在多个源文件中#包含头文件—您将看到第二种方法中的问题。链接器不喜欢同一函数有多个定义,即使它们是相同的。

Beta是正确的,当头文件包含在多个文件中时,在头文件中定义函数会导致问题。

我还建议您将头文件和实现文件分离到单独的文件中,这是一个良好的编码实践。头文件代表类的"接口"。公共函数是类的用户可用的,头文件为人们提供了一种简洁的方式来查看函数,而不必关心实现。此外,这使您能够在不影响调用者的情况下更改实现,因为它们只包含头文件,而实现通常只是一个被链接到的库。