[ C++で開発 ]

メンバー変数

クラスのメンバー変数についてのメモ

静的メンバー変数

静的メンバー変数の定義方法

static修飾子を付与してメンバー変数を宣言します。

Person.hh
class Person {
    static int totalNumber = 0;
public:
    Person();
    ~Person();
    :
};

静的メンバー変数は、通常のメンバー変数とは違い、クラスで1つの記憶域を必要とします。この1つの記憶域は、プログラマが明示的に定義してあげる必要があります。

Person.cc
#include "Perseon.hh"

int Person::totalNumber;

定数としての静的メンバー変数(JIS規格では「静的データメンバ」)

static constな変数として定義すると、クラスのメンバー変数を定数として定義することができます。汎整数型や列挙型の場合は、クラス定義中に初期値(定数初期化子)を記述することができます。

汎整数型
bool型、char型、wchar_t型、符号付整数型、符号なし整数型の総称、同義語として整数型とも呼ぶ
Alpha.hh
class Alpha {
public:
    static const int NUMBER = 1;
    static const char* const TEXT;
    :
};

汎整数型であるint型の静的データメンバ NUMBER および 汎整数型であるchar型へのポインタ型の静的データメンバ TEXTを定義(宣言)しています。

Alpha.cc
const char* const Alpha::TEXT = "Alpha";

汎整数型ではない静的データメンバTEXTについては、クラス定義内で初期化子を記述できない仕様により、定義をクラス定義外部に記述します。初期値を定義できた整数型の場合も必要です。

ビットフィールド

並び順(CPU依存)

符号

C++では、ビットフィールドの型にsigned/unsignedを省略した場合、unsignedとして扱われるようです。コンパイラによってはオプションでどちらに倒すかを制御できるものもあります。