[英]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;
最后,如果Gizmo
和Foo
在邏輯上沒有耦合,並且您可能在整個地方都使用Gizmo
而不需要Foo
,則它可能屬於自己的頭文件。
struct Gizmo
{
int n_;
};
#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.