Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义类的成员函数? 我正在使用一本关于C++的书,为了解决这些问题,我总是要求在XXXXX.H文件中声明成员函数的原型,并在XXXXX.CPP文件中正确定义函数的功能。在.h文件中定义成员函数有什么坏处吗?如果没有,在.cpp文件中定义它们有什么好处或好处吗?_C++_C_Function_Member Functions - Fatal编程技术网

定义类的成员函数? 我正在使用一本关于C++的书,为了解决这些问题,我总是要求在XXXXX.H文件中声明成员函数的原型,并在XXXXX.CPP文件中正确定义函数的功能。在.h文件中定义成员函数有什么坏处吗?如果没有,在.cpp文件中定义它们有什么好处或好处吗?

定义类的成员函数? 我正在使用一本关于C++的书,为了解决这些问题,我总是要求在XXXXX.H文件中声明成员函数的原型,并在XXXXX.CPP文件中正确定义函数的功能。在.h文件中定义成员函数有什么坏处吗?如果没有,在.cpp文件中定义它们有什么好处或好处吗?,c++,c,function,member-functions,C++,C,Function,Member Functions,如果在标题中定义方法,则必须将其标记为内联或在类定义中定义它们以防止多个定义: //A.h class A { void f() { } void g(); }; inline void A::g() { }; 除此之外,这是一个编码风格的问题。您通常会保持头的整洁,因为只提供一个接口来处理类,并抽象掉实现细节 一般来说。在某些情况下,您必须在头文件(模板)中定义函数,或者在需要时定义函数(以便更好地优化编译器)。如果您总是在.h文件中编写代码,您将永远无法执

如果在标题中定义方法,则必须将其标记为
内联
或在类定义中定义它们以防止多个定义:

//A.h
class A
{
    void f()
    {
    }
    void g();
};
inline void A::g() 
{
};
除此之外,这是一个编码风格的问题。您通常会保持头的整洁,因为只提供一个接口来处理类,并抽象掉实现细节


一般来说。在某些情况下,您必须在头文件(模板)中定义函数,或者在需要时定义函数(以便更好地优化编译器)。

如果您总是在
.h
文件中编写代码,您将永远无法执行某些技术,例如
转发声明
。由于在头中编写代码时不能使用前向声明,因此将无法解决
交叉依赖问题

因此,您需要在
.h
文件中包含所需的所有内容。在其他文件中包含此文件将包括已包含的所有内容。因此,在许多情况下,代码中的任何微小更改都将导致几乎完全的重新编译


此外,读取
.h
文件中的代码更难,因为您希望在
.h
中看到类的接口,而不是实现。

您不能在.h文件中定义函数体。您可以随意编写代码,无需遵循任何协议,但它会一直保持良好状态,直到其他人看不到为止……这通常被称为仅标题库,你最好用这些知识搜索其他答案,例如@sedran:-该死,我不知道!他们在学校里教我们:(你可以用标题和转发声明很好地解决交叉依赖问题。标题没有什么神奇之处。但是你提到的其他问题仍然适用。但是成员函数不是接口的一部分吗?是的,转发声明是不可能的!谢谢你的帮助!@R.MartinhoFernandes:你打算如何解决cro如果需要在同一个文件中写入实现,则ss依赖项?转发声明将不可用enough@F'OlaYinka:成员函数当然是其中的一部分。但是要使用这些函数,您不需要查看实现。您只需打开一个标题并查看函数文档。如果您看到的是一个实现,那么它也将是ha为了找到所需的信息,您只需先编写声明和定义(
inline
)之后,没有什么不同。他们没有用新的C++标准解决这个模板问题吗?在H文件中编写整个类实现不是问题。它变得非常凌乱和不可读,并且不能用H文件提供给调用方的公共接口,必须公开整个实现。@ Lundin您可以在不同的文件中分离实现,但它仍然必须可见。还有一个缺点是,在最琐碎的实现更改之后,客户端代码必须重新编译,而不是重新链接。