Cpp クラス 静的メンバ変数のソースを表示
新しいページはコチラ
移動:
案内
,
検索
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス 静的メンバ変数</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> </tr> </table> ※このページでは[[C PlusPlus|C++]]にのみ存在する機能として、記事タイトルが<nowiki>C++ クラス 静的メンバ変数</nowiki>になっています。<br /> <br /> == '''静的メンバ変数''' == 静的変数は関数をまたいでも使えた変数でした。静的メンバ変数はクラスの中に宣言される変数で、利用することを宣言すれば、クラスを変数化したり、ポインタ変数によって実体化することなく利用できる変数となります(この2種類の変数を含めてオブジェクトと表現したいと思います。自分はプログラム中では通常の変数は_objとサフィックスをつけて明示したり、ポインタによるインスタンスは_instanceや_iのようなサフィックスをつけたりして区別することがあります。)。クラスのオブジェクトを生成しなくても使えるという利点がある反面、逆に言えば複数のオブジェクトを作っても一つしか使えないということです。これはクラスの中にある唯一の変数となることからグローバル変数とは違った独立性を保持すると考えれば、そういった使い方をするためのものだと考えるべきです。 静的メンバ変数はプログラムの中でクラスが複数実体化されようと、宣言さえすれば使える唯一の変数であるということになります。 また静的メンバ変数は、プロトタイプ宣言が終わった後のスコープの外側で実体化を定義できる変数になります。ここのサンプルでは、標準の型を使った変数ですが、クラスそのものや、構造体、共有体、列挙型のようなユーザが定義する型でも定義できます。 静的メンバ変数を実体化するタイミングは通常クラスならクラスのヘッダファイルと対になるプログラムファイルに記述します。例えば、CStaticMemberVar001というクラスの中にある静的メンバ変数ならStaticMemberVar001.hファイルで静的メンバ変数を定義し、StaticMemberVar001.cppのスコープの外側で実体化をします。もちろんsample_main.cppのようなプログラムファイルのスコープの外側で実体化しても良いですが、あまりクラスを使う側に実体化を任せるということはないと思いますし、ややこしくなるので、あまりそういうことはしないのではないかと思います。 では実際に使ってみます。 StaticMemberVar001.h <syntaxhighlight lang="cpp" line start="1"> #pragma once class CStaticMemberVar001 { private: static int m_nValue_static; //★1.静的メンバ変数宣言 アクセス指定子 プライベート public: static int mpub_nValue_static;//★2.静的メンバ変数宣言 アクセス指定子 パブリック CStaticMemberVar001(void); ~CStaticMemberVar001(void); }; </syntaxhighlight> StaticMemberVar001.cpp <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "StaticMemberVar001.h" int CStaticMemberVar001::m_nValue_static = 0;//★3.実体化 アクセス指定子プライベート int CStaticMemberVar001::mpub_nValue_static = 0;//★4.実体化 アクセス指定子パブリック CStaticMemberVar001::CStaticMemberVar001(void) { printf("CStaticMemberVar001::m_nValue_static = %d\n",m_nValue_static);//★5.静的メンバ変数利用 プライベート m_nValue_static = 100; printf("CStaticMemberVar001::m_nValue_static = %d\n",m_nValue_static); } CStaticMemberVar001::~CStaticMemberVar001(void) { } </syntaxhighlight> メインプログラムは以下のようなものにしました。 sample_main.cpp <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "StaticMemberVar001.h" int _tmain(int argc, _TCHAR* argv[]) { //★6.静的メンバ変数利用 パブリック printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static); CStaticMemberVar001::mpub_nValue_static = 200; //CStaticMemberVar001::m_nValue_static = 1000;//★7.静的メンバ変数利用 プライベートへのアクセスは駄目。 printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static); CStaticMemberVar001* CStaticMemberVar001_Instance = new CStaticMemberVar001; return 0; } </syntaxhighlight> 出力結果 <syntaxhighlight lang="text"> CStaticMemberVar001::mpub_nValue_static = 0 CStaticMemberVar001::mpub_nValue_static = 200 CStaticMemberVar001::m_nValue_static = 0 CStaticMemberVar001::m_nValue_static = 100 </syntaxhighlight>
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス 静的メンバ変数
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ