C++クラスのstatic変数を初期化する
C++クラスのstatic変数を初期化する方法を紹介します。
1.はじめに
C++クラスのメンバ変数は普通、newでインスタンスを作る際に初期化するのですが、staticな変数で初期化は一度だけ行いたいという状況が発生しました。
ということでその要件を満たすためのサンプルを作ってみました。
2.staticな変数を1度だけ初期化する
具体的には、newの前にstatic変数を初期化し、そのあとインスタンスを作るというものです。
sample.h
class Sample {
private:
int bar;
public:
static int foo;
Sample(int number);
void display();
};
sample.cpp
#include <iostream>
#include "sample.h"
int Sample::foo;
Sample::Sample(int number) {
bar = number;
}
void Sample::display() {
std::cout << foo << " " << bar << std::endl;
}
test.cpp
#include "sample.h"
int main() {
Sample::foo = 999;
Sample* a = new Sample(100);
a->display();
return 0;
}
実行
% g++ sample.cpp test.cpp
% ./a.out
999 100
ということで、newする前に初期化したstatic変数をインスタンスからアクセスしても値が保持されていることが確認できました。
サンプルではpublicにして、外部から直接アクセスしていますが、static関数を用意すればprivateでも大丈夫だと思います。
Posted by yujiro このページの先頭に戻る
トラックバックURL
コメントする
greeting