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

时间:2009-12-07 17:49:10

标签: c++ class

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

11 个答案:

答案 0 :(得分:29)

没有必须遵循的规则(如在java中)。您可以随意放置并命名您喜欢的命名文件中的类(除了后缀)。

然而另一个问题是,这是好的做法(不是!)。

答案 1 :(得分:10)

是的,你可以。这很容易验证。

class C
{
};

class D
{
};

int main(int argc, char**argv)
{
  return 0;
}

答案 2 :(得分:6)

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

答案 3 :(得分:6)

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

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

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

答案 4 :(得分:5)

通常情况下,如果......

,您应该只将多个类放在一个文件中
  1. 这些课程紧密相连。例如,如果一个类定义了自己的迭代器,那么将迭代器类放在与它用于迭代的类相同的文件中可能是合适的。

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

  3. 在这两种情况下,是否要将“公共帮助者”(例如迭代器)和“私人助手”(例如pimpl)类放在同一个源文件或不同的源文件中的决定应该针对整个项目进行一次,并始终遵循。

答案 5 :(得分:3)

只是可扩展性/可维护性问题;)没有严格的规则。

答案 6 :(得分:3)

没有。你不会遇到麻烦。在C ++中,您可以在单个文件中定义多个类。

答案 7 :(得分:3)

在单个文件中定义多个类不会有任何问题。

对于生产系统来说,这不是特别好的做法,但这不是家庭作业的问题

答案 8 :(得分:3)

是的,你可以。必须支持这一点,否则您将无法创建嵌套类。

class outside
{
public:
      class nested
      {
      public:
            static int x;
            static int y;
            int f();
            int g();
      };
};

答案 9 :(得分:2)

问题来自java / C#样式源表示。在C ++中,源代码布局非常不同。一个源单元/“cpp文件”/可以处理您希望输入的声明。但是,这不是一个好的策略,因为在某些时候你需要告诉其他类如何处理你的类。在C ++中,类可以有一个单独的定义和声明部分,您可以将它们放在不同的文件中。使用#include语句在其他源文件之间共享类的定义,因此您可以在需要定义的任何场景中使用这些类。如果您正在处理仅在一个源文件中使用的类,则可以将其隐藏在源文件中,但如果要将它们连接到其他类,则需要将该定义放入头文件中。

它可以帮助您提高编译速度 - 特别是如果您使用的是预编译的头文件,但是要小心,因为pch-s不是C ++标准的一部分,并且每个编译器都以不同的方式处理它们! - 以及代码的灵活性。你的老师应该知道这些事实......

答案 10 :(得分:2)

是的,你可以毫无问题地做到这一点。多个类或嵌套类。