是否可以在一个.cpp文件中定义多个类?

Cha*_*had 9 c++ class

我正在为学校做一个项目,教师坚持要把所有代码放到一个.cpp文件中(为了方便他的评分).我想在这个文件中定义多个类.这样做会遇到任何问题吗?

RED*_*AIR 29

没有必须遵循的规则(如在java中).您可以自由地在您喜欢的命名文件中放置和命名类(除了后缀).

然而,这是另一个问题,如果这是良好的做法(它不!).

  • 除此之外,别忘了必须在主类或编译器找不到它们之前放置要使用的类。(除非您使用前向声明) (2认同)

Bri*_*ndy 10

是的你可以.这很容易验证.

class C
{
};

class D
{
};

int main(int argc, char**argv)
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然通常的C++免责声明适用,"只是因为你的编译器接受它并不意味着它是根据C++标准允许的"(尽管在这种情况下它当然是完全有效的) (7认同)

aJ.*_*aJ. 6

将多个类写入单个文件没有问题.这只是维护方式的问题.


Car*_*org 6

您可以完美地在同一个文件中声明和定义了几个类.

但是,当一个类依赖于后来的另一个类时,你必须要小心.如果A类要成为另一个B类的成员,则编译器需要其完整声明(以便它知道其大小),并且您需要将其放在文件的更高位置.如果这个成员只是一个指针(它的大小与指向的类的大小无关),那么指向类的简单前向声明就足够了.

请注意,使用该#include机制,无论如何都会发生这种情况:预处理器将所有包含的文件"复制粘贴"到正在编译的文件中.对于编译器来说,它是一样的.


Edw*_*per 5

通常,只有在以下情况下,才应将多个类放在一个文件中:

  1. 这些类之间的联系非常紧密。例如,如果一个类定义了自己的迭代器,则将该迭代器类与用于迭代的类放在同一文件中可能是合适的。

  2. 其中一类用于公共消费,其余的类用于实现它。例如,如果您使用“ pimpl”惯用语,则这将适用,其中公共类包含的唯一成员是指向私有类的指针。在这种情况下,将私有/隐藏的类放在与使用它们的公共类相对应的源文件中是合适的。

在这两种情况下,对于整个项目,应该一次决定是否将“公共帮助程序”(例如迭代器)和“私有帮助程序”(例如pimpl)类放在同一个源文件中,还是放在另一个源文件中。始终如一。