< DLLよりコールした GetModuleFileName で取得されるパス | error C2143 >

March 23, 2004

クラスのメンバ変数をstatic, const, あるいはその両方で宣言する

staticメンバ変数

クラスのメンバ変数で、値をオブジェクトごとに持つのではなく、すべてのオブジェクトで同じ変数を参照したい場合は、staticをつけて宣言する。

// sample.h
class Sample
{
public:
    Sample ();
    ~Sample ();
    
private:
    static int _staticVar;
};

staticメンバ変数の初期化は、下のように実装ファイルで定義をかく。(処理系によって若干解釈が違うといううわさも)

// sample.cpp
#include "sample.h"
int Sample::_staticVar = 0;    // 初期化

constメンバ変数

クラスのメンバ変数の値を、オブジェクト作成後に変更できなくするにはconstをつけて宣言する。

// sample.h
class Sample
{
public:
    Sample ();
    Sample (const int foo);
    ~Sample ();
    
private:
    const int _constVar;
};

constメンバ変数の初期化は、コンストラクタに初期化リストをつけてやれば初期化できる。

// sample.cpp
#include "sample.h"
Sample::Sample ()
    : _constVar (0)
{
    // 初期化処理...
}

// 引数で初期化も可能。
Sample::Sample (const int foo)
    : _constVar (foo)
{
    // 初期化処理...
}

static constメンバ変数

その両方の場合は?...初期化の方法はひとつ。

// sample.h
class Sample
{
public:
    Sample ();
    ~Sample ();
    
private:
    static const int _staticConstVar;
};
// sample.cpp
#include "sample.h"
const int Sample::_staticConstVar = 0;    // 初期化

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/277

コメント

「static const の初期化 cpp」でググってやってきました。すっかり忘れてましたので、助かりました。

お役に立てたようで何よりです。
私も時々分からなくなって、自分で自分のブログを検索したりしてます 笑。

こんにちは、またブログ覗かせていただきました。また、遊びに来ま~す。よろしくお願いします

こんにちわ、
16年後の私を助けてくれてありがとうございました。
static const の方法がわかりました!!

こんにちわ

え、俺去年書き込んでるやん orz また遊びに来ちゃいました。精進しませんねぇ(笑)

pythonの割合が増えると、ふとこういうところで「なんやったっけ?」ってなります。
お世話になりました~^^

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?