C++ 有没有办法得到C++;不同文件上的类是否将方法定义保留在类中?
文件:A.cpp 文件:A.hpp <>我有一个java背景,我从C++移到C++。我坚持每个文件保留一个类的想法,这样就有了一个干净的代码。然而,我不喜欢使用范围解析操作符的想法,这使得从类中删除类定义看起来很难看 我有没有办法将类定义保持在C++ 有没有办法得到C++;不同文件上的类是否将方法定义保留在类中?,c++,C++,文件:A.cpp 文件:A.hpp 我有一个java背景,我从C++移到C++。我坚持每个文件保留一个类的想法,这样就有了一个干净的代码。然而,我不喜欢使用范围解析操作符的想法,这使得从类中删除类定义看起来很难看 我有没有办法将类定义保持在类构造中 注意:我已经访问了,但没有回答我的问题。是的,您可以在标题中内联定义它。然后,您可以包含所有代码 class A { void increment() { i++; } }; 然而,这也带来了一个后果。如果对
类
构造中
注意:我已经访问了,但没有回答我的问题。是的,您可以在标题中内联定义它。然后,您可以包含所有代码
class A
{
void increment()
{
i++;
}
};
然而,这也带来了一个后果。如果对实现进行更改,则必须完全重新编译包含该头的每个文件(要使用该文件)
在这种情况下,我们不应该假设语言A只是语言B,只是有一些细微的变化。使用两个文件的头/实现模式是C++的一个非常重要的部分,在试图假装它是java和使用java的一个文件方法时,会有很多麻烦。 虽然它不是非常干燥,但我认为分离的定义和实现是C++中通常如何实现的。p> 无论如何,您可以将所有类代码移到头文件中,但最终会增加编译时间,因为每个使用A的cpp文件都会编译整个代码。这也会增加二进制文件的大小。如果你有很多课程使用了许多其他类,你可能会被编译的时间和大小所累,很多时候如果你用C++的方式来编译。(如果你的链接器不是很聪明,但我想所有的优化都是在编译时完成的)
您也可以将所有的类定义移动到cpp文件中,但我想这会在几乎所有非平凡的情况下更加混乱。自包含?我想你把两个文件都复制错了。。。无论如何,在大多数情况下,没有什么能阻止您将整个类定义内联,但是耦合性更强,编译时间更长。因此,它是非常令人沮丧的。当在罗马,做罗马人。这将涵盖在任何初学者C++书籍。事实上,大多数书籍都会在教你如何将一个类定义分离为源文件/头文件之前教你如何定义一个类。正如上面指出的,你的代码是错误的——你在两个文件中都有相同的代码。我不同意这样的逻辑,即每个文件保留一个类更干净。通过这样做,您将迫使代码的任何读者仔细阅读所有与他们无关的实现细节,以确定他们应该使用的接口。通过分离,您可以将接口和文档放在标题(代码用户想要的部分)中,并将实现放在源代码中。C++没有完美地完成这一点,但是如果你使用的话,你可以靠近。或者你可以使用<代码>内联关键字将类的实现放在类定义之后,但是我觉得这是对来自java的人的更清晰的注释。
#ifndef HEAD_H
#define HEAD_H
class A
{
private:
int i;
public:
void increment();
int get_i();
};
#endif
class A
{
void increment()
{
i++;
}
};