我正在编写一本关于c ++的书并解决问题,我总是被要求宣布成员函数' xxxxxx.h文件中的原型,并在xxxxxx.cpp文件中正确定义函数体。在.h文件中定义成员函数有什么危害或缺点吗?如果没有,在.cpp文件中定义它们有什么好处或好处吗?
答案 0 :(得分:3)
如果在标题中定义方法,则必须将其标记为inline
或在类定义中定义它们以防止多个定义:
//A.h
class A
{
void f()
{
}
void g();
};
inline void A::g()
{
};
除此之外,这是编码风格的问题。您通常会保持标头清洁,以便仅提供用于处理类的接口,并抽象出实现细节。
通常。在某些情况下,您必须在标题(模板)中或在需要时定义函数(以允许更好的编译器优化)。
答案 1 :(得分:3)
如果您始终在.h
个文件中编写代码,您将永远无法执行某些技术,例如forward declaration
。由于在标题中编写代码时无法使用前向声明,因此无法解决cross dependencies
。
因此,您需要在.h
文件中包含所需的所有内容。将此文件包含在其他文件中将包括已包含的所有内容。因此,在许多情况下,代码中的任何小变化都将导致几乎完全重新编译。
另外,阅读.h
文件中的代码更加困难,因为您希望在.h
中看到该类的界面,而不是实现。