在C ++类+最终常量中放置Structs和Enums的位置

时间:2011-09-14 16:22:29

标签: c++

我已经开始阅读C ++了,我对类型为Enum和Struct的成员变量有疑问。我应该在哪里声明Enums / Structs,以便在将标题和实现文件分开时可以将它们用作成员变量?而且,我如何在C ++类中创建最终成员变量?我在添加const int myTest作为成员变量时遇到编译错误,我应该在哪里初始化它们?

4 个答案:

答案 0 :(得分:5)

头文件就像一个人说'我可以做到这一点,那个和另一个' - 所以把声明放进去 - 枚举,结构,类声明,常量,......

实现文件就像一个人说'我能做到这一点,这就是我能做到的' - 它产生了一个配方 - 实际的机器代码让CPU紧缩。

const说 - 不要改变我。要在你需要的课堂上初学者:

class X
{
  private:
     const int y;
  public:
     X() : y(5) {}
};
例如,

。如果你正在学习C ++ const是一个非常有用的工具,可以防止你犯很多错误。

答案 1 :(得分:3)

最简单的解决方案是简单地声明枚举和放大器。在他们所属的班级之前直接结构:

struct Gizmo
{
  int n_;
};

class Foo
{
public: 
  Gizmo gizmo_;
};

如果Gizmo在逻辑上耦合到Foo(例如,如果您在使用Gizmo的上下文之外永远不会使用Foo),那么它也可能有意义使Gizmo成为嵌套类:

class Foo
{
public:
  struct Gizmo
  {
    int n_;
  };

  Gizmo gizmo_;
};

如果要实例化以这种方式声明的Gizmo,您可以自行解决范围:

Foo::Gizmo gizmo;

最后,如果GizmoFoo没有逻辑耦合,并且您可以在不需要Gizmo的情况下使用Foo,那么它可能属于它自己的头文件。

gizmo.h

struct Gizmo
{
  int n_;
};

foo.h中

#include "gizmo.h"
class Foo
{
public: 
  Gizmo gizmo_;
};

答案 2 :(得分:3)

  

我应该在哪里声明枚举/结构,以便在分隔标题和实现文件时可以将它们用作成员变量?

你必须在使用前声明它们,即。在类型的类中声明成员之前。之一:

  • 您可以在自己的头文件中定义它们,并在类的头文件中#include该文件(在您的类声明之前)
  • 或者您在班级之前定义它们
  • 或者在成员
  • 之前在班级中定义它们
  

我在将const int myTest作为成员变量添加时遇到编译错误,我应该在哪里初始化它们?

在构造函数中,使用初始值设定项。即:

Clazz::Clazz() : my_const_var(0) { ... }

答案 3 :(得分:1)

如果要将枚举或结构添加为类的成员变量,则在声明成员之前必须完成枚举或结构的定义。这可以在类中,在类之外,但在.h标题之前,或者在当前之前或之内包含的不同.h标题中。

将成员变量声明为const应该没有任何问题,但是它对必须如何初始化的方式设置了限制。您必须在构造函数的初始化列表中执行此操作。

MyClass::MyClass() : myTest(value)
{
}