今回は静的メンバ変数の話です。
これは、メンバ変数に static を付けるだけで
「静的メンバ変数」になります。
静的メンバ変数とは、複数のオブジェクトで
共通のメモリ領域を持つメンバ変数のことです。
一つのクラスから精製したオブジェクトの静的メンバ変数は、
値が共通になります。
どのオブジェクトでも共通なデータは static にできますので、
メモリの節約に役立ちます(^^)
class Food
{
public:
static double sm_tax; //staticを付ける
void SetPrice(int price);
int GetPrice(void);
private:
int m_price;
};
静的メンバ変数の初期化は cppファイルの中で一度だけ行います。
コンストラクタで初期化しないよう注意してください。(^^;)
オブジェクトの生成ごとに何度も初期化されてしまいますので(*´Д`)
静的メンバ変数のアクセスについて
publicな静的メンバ変数の場合、オブジェクトを生成しなくても
スコープ解決演算子を使ってアクセスすることができます。
また、オブジェクトを生成している場合は、「.(ピリオド)」を使って
通常のメンバ変数のようにアクセスすることもできます。
int main(void)
{
Food::sm_tax = 1.05; //初期化
Food myFood;
:
myFood.sm_tax = 1.08; //増税8%
:
では、サンプルプログラム全体です。
#include <iostream>
#include <string.h>
using namespace std;
class Food
{
public:
static double sm_tax; //staticを付ける
void SetPrice(int price);
int GetPrice(void);
private:
int m_price;
};
double Food::sm_tax = 1.05;
void Food::SetPrice(int price)
{
m_price = price;
}
int Food::GetPrice(void)
{
return m_price;
}
int main(void)
{
Food::sm_tax = 1.05; //初期化
Food myFood;
myFood.SetPrice(1500);
cout << "Food Price1 = " << myFood.GetPrice() * Food::sm_tax << endl;
myFood.sm_tax = 1.08; //増税8%
cout << "Food Price2 = " << myFood.GetPrice() * Food::sm_tax << endl;
return 0;
}
実行結果
# ./test
Food Price1 = 1575
Food Price2 = 1620
うむむ、消費税8%だと 1500円のモノを買った時の値段は
割高感満点ですね(-_-;)
今日の名言
幸福への道はただ一つしかない。それは意志の力でどうにもならない物事は
悩んだりしないことである。
エピクテトス
随分前のことだが、ある日私は不安と幻滅をおぼえ、私の一生は自分では
どうにもならない力で操られているように思われた。ある朝ふと新約聖書を
開いてみると、次の一節が目に止まった。「我を地上に送りたまいし者、常に
我とともにあり-父なる神は我を見捨てたまわず」私の人生はその瞬間から
一変した。それ以来、私にはあらゆることが永遠に違ったものとなった。
一日として、この一節を繰り返さない日はなかった。近年、多くの人々が
私のもとを訪れて助言を求めるが、私はいつも別れ際にこの励ましの言葉を
伝えている。この一節に目を止めて以来、私はこの言葉によって生きてきた。
私はこの一節とともに歩み、この中に平和と力とを見出している。私にとっては、
これこそ宗教の真髄である。この言葉は、人生を価値あるものにするすべての
物の基盤となっている。何物にも代えがたい私の人生の教科書である。
ジョセフ・R・サイズー