在不同的文件上有C++类的任何方法都可以将方法定义保留在类中

Any way to have C++ classes on different files keeping the method definition within the class?

本文关键字:方法 都可以 定义 保留 C++ 文件 任何      更新时间:2023-10-16

文件:A.cpp

void A::increment()
{
    i++;
}
int A::get_i()
{
    return i;
}

文件:A.hpp

#ifndef HEAD_H
#define HEAD_H
class A
{
private:
    int i;
public:
    void increment();
    int get_i();
};
#endif

我有java背景,我将从它转向C++。我坚持每个文件保留一个类以获得干净的代码。然而,我不喜欢使用范围解析操作符的想法,因为它从类中删除了类定义,看起来很难看。

有没有什么方法可以将类定义保留在class构造中?

注意:我已经访问过这个和这个,它不能回答我的问题。

是的,您可以在标题中内联定义它。然后你可以#包括所有的代码

class A
{
    void increment()
    {
        i++;
    }
};

然而,这是有后果的。如果对实现进行更改,则必须完全重新编译包含该头的每个文件(以使用该文件(。

在这种情况下,我们不应该假设语言A只是语言B,有一些细微的变化。使用两个文件的头/实现模式是C++的一个非常重要的部分,在试图假装它是Java和使用Java的单文件方法论时会遇到很多困难。

虽然它不是很DRYis,但我认为分离的定义和实现通常是在C++中完成的。

无论如何,您可以将所有类代码移动到头文件中,但最终会增加编译时间,因为每个使用A的cpp文件都会编译整个代码。这也会增加二进制文件的大小。如果你有很多类使用许多其他类,你可能会导致编译时间和大小的增加,很多时候如果你用C++的方式来做的话。(如果你的链接器不是很聪明,但我想所有的优化都是在编译时完成的(

您也可以将所有的类定义移动到cpp文件中,但我想这会在几乎所有非平凡的情况下使事情更加混乱。

相关文章: