簡體   English   中英

在C ++類+最終常量中將結構和枚舉放在何處

[英]Where to place Structs and Enums in C++ class + final constants

我已經開始閱讀C ++,並且對類型和Enum和Struct的成員變量有疑問。 我應該在哪里聲明Enums / Structs,以便在我分離頭文件和實現文件時可以將它們用作成員變量? 而且,如何在C ++類中創建最終成員變量? const int myTest添加為成員變量時,我只是收到編譯錯誤,應該在哪里初始化它們?

頭文件就像一個人說“我可以做到這一點,另一個可以做到”-因此在其中放入聲明-枚舉,結構,類聲明,常量等。

實現文件就像一個人說:“我可以做到,這就是我可以做到的。”-它產生一個配方-CPU的實際機器代碼。

const說-不要改變我。 要初始化課程,您需要:

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

例如。 如果您正在學習C ++,則const是一個非常有用的工具,可以防止您犯多種錯誤。

最簡單的解決方案是在類所屬的類之前直接聲明枚舉和結構:

struct Gizmo
{
  int n_;
};

class Foo
{
public: 
  Gizmo gizmo_;
};

如果Gizmo在邏輯上與Foo耦合(例如,如果您永遠不會在使用Foo的上下文之外使用Gizmo ),則將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_;
};

我應該在哪里聲明Enums / Structs,以便在我分離頭文件和實現文件時可以將它們用作成員變量?

也就是說,必須在使用它們之前聲明它們。 在成員的類的類中聲明成員之前。 要么:

  • 您可以在自己的頭文件中定義它們,並在類的頭文件中#include該文件(在類聲明之前)
  • 或者您在上課之前定義它們
  • 或者您在班級成員之前定義它們

將const int myTest添加為成員變量時,我只是收到編譯錯誤,應該在哪里初始化它們?

在構造函數中,使用初始化程序。 即:

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

如果要添加枚舉或結構作為類的成員變量,則在聲明成員之前,枚舉或結構的定義必須完整。 它既可以在類內部,也可以在類外部,但在.h標頭中位於其前面,也可以在當前標本之前或之內包含的其他.h標頭中。

將成員變量聲明為const應該沒有任何問題,但是它對如何初始化它施加了限制。 您必須在構造函數的初始化程序列表中執行此操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM