我应该同时使用头文件和cpp/源文件吗?
Should I use both header files and cpp/source files?
我有一个哺乳动物.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是正确的,当头文件包含在多个文件中时,在头文件中定义函数会导致问题。
我还建议您将头文件和实现文件分离到单独的文件中,这是一个良好的编码实践。头文件代表类的"接口"。公共函数是类的用户可用的,头文件为人们提供了一种简洁的方式来查看函数,而不必关心实现。此外,这使您能够在不影响调用者的情况下更改实现,因为它们只包含头文件,而实现通常只是一个被链接到的库。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- cpp 在主源文件中包括.cpp文件导致错误"duplicate symbol"
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- main.cpp 如何知道包含标头的源文件?
- 如何将包含多个.cpp源文件的文件夹导入Eclipse项目中,每个源文件都有一个main()定义
- 错误 C1083:无法打开源文件:"stdafx.cpp":没有此类文件或目录
- 导出visual studio c++项目以在另一个项目中使用,而不显示.cpp和.h源文件
- 用于配置cpp源文件位置的环境变量
- 如何从另一个.cpp源文件调用main.cpp中定义的方法
- 如何在 Visual 2010 中包括从源文件 (.cpp) 在项目中创建的头文件 (.h)
- 在头中声明变量而不是在源文件(cpp/h)中声明变量有什么区别
- 是否应在头文件或.cpp源文件中指定C++函数的默认参数值
- 用于解析C++源代码并将头内联方法移动到.cpp源文件的工具
- 将源文件拆分为 cpp 和 h 后无法编译项目,获得"未定义的引用..."
- 选择在构建/调试时首先显示源文件(.cpp)
- 是否有自动的方法来检测我应该编译哪些.cpp源文件(取决于#include *.h)
- c++在两个.cpp源文件之间传递动态变量
- 我应该同时使用头文件和cpp/源文件吗?