【问题标题】:C++ - .h and .cppC++ - .h 和 .cpp
【发布时间】:2011-04-15 09:05:35
【问题描述】:

如果我有一个包含以下内容的 .h 文件,例如:

class A
{
...
}

注意这里没有自定义构造函数。

现在,在 .cpp 文件中,我可以写以下内容吗:

A
{
...
}

也就是说,可以在类名后面使用构造函数如下吗?

A::A()
{
...
}

谢谢。

【问题讨论】:

  • 你打算在A{...}写什么?它不是有效的语法。
  • A{...} 无效,前提是它是一个意外有效的宏!!

标签: c++ class constructor header implementation


【解决方案1】:

如果您的问题是是否可以使用 A{} 来定义构造函数,不,如果您在 cpp 中定义构造函数,则需要对构造函数使用 A::A(){...} 语法文件。

如果你问你是否不需要构造函数,不,你不一定需要,编译器会为你提供一个默认值。

我应该说,如果你在类定义中做构造函数可以使用A(){...},比如

class A
{
public:
  A(){}
};

【讨论】:

    【解决方案2】:

    我相信您的问题的答案是“否”。但这是一个令人困惑的问题。您为 .cpp 文件的内容建议的语法显然是不可编译的。

    【讨论】:

      【解决方案3】:

      类名后面不使用构造函数可以吗

      随着类变得越来越长、越来越复杂,混合定义和实现细节会使类更难管理和使用。

      传统上,类定义放在与类同名的头文件中,类外定义的成员函数放在与类同名的.cpp文件中。

      【讨论】:

        【解决方案4】:

        没有。一旦你像这样定义了 A 类,编译器就会期望 A 启动其中一个

        A MyObject;
        A MyOtherObject = { /* initial values */ }; // C style since there's no ctor
        A MyFunction();
        A MyFunction() { return MyObject; }
        

        或者可能是类似的变体

        A* MyPointer;
        A& MyReferemce = MyObject;
        

        如您所见,编译器希望您在A 之后声明一些内容。但是你有A {。这是不对的:你开始了一个声明,但你从未命名你要声明的内容。

        【讨论】:

          【解决方案5】:

          是的,你可以。如果我正确理解了你的问题。

          头文件

          #include &lt iostream&gt 使用命名空间标准; A类{ 上市: 一种(); 无效函数(); };

          文件

          #include "h.hpp"

          使用命名空间标准;

          A::A(){cout &lt&lt "构造函数" &lt&lt endl;}

          诠释主要(){ 一个; 返回0; }

          【讨论】:

          • 我很好奇您是如何将这个问题解释为“是”作为答案的。正如我所解释的那样,它非常“不”。
          • 这甚至没有接近得到答案。你至少需要解释一下为什么答案是肯定的。
          • @Cody 和 ildjam :请根据我对问题的理解找到代码。
          • @OP:这是你想要的吗?
          • @ALL:SO 必须强迫不负责任地投反对票的人评论他们投反对票的原因。使用正确的 cmets 确实有助于改善答案,但仅仅投反对票确实是一种愚蠢而幼稚的行为。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多