スポンサーサイト静的データメンバ

Home > ----- / スポンサー広告 > This Entry 2006-06 / CからC++へ > This Entry [com : 0][Tb : 0]

--------

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2006-06-14

メンバ関数に静的メンバ関数があるように、データメンバにも静的データメンバというものがあります。静的データメンバは、クラス型のオブジェクトが保持するメンバではなく、静的記憶域期間を持つ非局所オブジェクトです。

静的メンバ関数と同様、静的データメンバもキーワード static を付けることで宣言しますが、やはりstaticが付くからといって内部結合になるわけではありません。ある意味で、その振る舞いは大域的オブジェクトに近いといえますが、アクセス制御によって非公開(private)や限定公開(protected)にすることができます。

静的データメンバは、宣言しただけでは実体が生成されません。宣言とは別に定義を行う必要があります。静的データメンバの定義は、原則としてクラスの外で行うことになります。

struct A
{
  static int x;
};

int A::x = 123;

ここでは、123という初期化子を与えましたが、(const修飾子がなければ)静的データメンバの初期化子は省略することができます。この辺りは、通常のオブジェクトの定義と同じです。

先ほど、静的データメンバの定義は、「原則として」クラスの外で行うと書きましたが、例外もあります。それは、静的データメンバが、汎整数型のconstオブジェクトの場合です。その場合に限り、

struct A
{
  static const int x = 123;
};

のように、クラスの中で直接、初期化子を指定して、定義を行うことができます。ただし、規格準拠度の低い古いコンパイラでは、こうした記述ができないものも存在しますので、その場合は通常通り、クラスの外で定義を行わなければなりません。


Comment

Post a Comment









管理者にだけ表示を許可

Trackback

http://cppemb.blog17.fc2.com/tb.php/79-4d5c0a62

C++と組み込み環境 | Page Top▲

New >>
インライン関数
<< old
静的メンバ関数
ブログ内検索
RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。