Cpp クラス 静的メンバ変数 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(静的メンバ変数)
 
1行: 1行:
 +
[[C PlusPlus#C++からの技術|C++]]に戻る
 +
 +
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス 静的メンバ変数</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス 静的メンバ変数</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
8行: 11行:
 
<br />
 
<br />
 
== '''静的メンバ変数''' ==
 
== '''静的メンバ変数''' ==
 +
 
静的変数は関数をまたいでも使えた変数でした。静的メンバ変数はクラスの中に宣言される変数で、利用することを宣言すれば、クラスを変数化したり、ポインタ変数によって実体化することなく利用できる変数となります(この2種類の変数を含めてオブジェクトと表現したいと思います。自分はプログラム中では通常の変数は_objとサフィックスをつけて明示したり、ポインタによるインスタンスは_instanceや_iのようなサフィックスをつけたりして区別することがあります。)。クラスのオブジェクトを生成しなくても使えるという利点がある反面、逆に言えば複数のオブジェクトを作っても一つしか使えないということです。これはクラスの中にある唯一の変数となることからグローバル変数とは違った独立性を保持すると考えれば、そういった使い方をするためのものだと考えるべきです。
 
静的変数は関数をまたいでも使えた変数でした。静的メンバ変数はクラスの中に宣言される変数で、利用することを宣言すれば、クラスを変数化したり、ポインタ変数によって実体化することなく利用できる変数となります(この2種類の変数を含めてオブジェクトと表現したいと思います。自分はプログラム中では通常の変数は_objとサフィックスをつけて明示したり、ポインタによるインスタンスは_instanceや_iのようなサフィックスをつけたりして区別することがあります。)。クラスのオブジェクトを生成しなくても使えるという利点がある反面、逆に言えば複数のオブジェクトを作っても一つしか使えないということです。これはクラスの中にある唯一の変数となることからグローバル変数とは違った独立性を保持すると考えれば、そういった使い方をするためのものだと考えるべきです。
  
21行: 25行:
  
 
では実際に使ってみます。
 
では実際に使ってみます。
 +
 +
 
StaticMemberVar001.h
 
StaticMemberVar001.h
 
<syntaxhighlight lang="cpp" line start="1">
 
<syntaxhighlight lang="cpp" line start="1">
69行: 75行:
 
   printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static);
 
   printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static);
 
   CStaticMemberVar001::mpub_nValue_static = 200;
 
   CStaticMemberVar001::mpub_nValue_static = 200;
   //CStaticMemberVar001::m_nValue_static = 1000;//★6.静的メンバ変数利用 プライベートへのアクセスは駄目。
+
   //CStaticMemberVar001::m_nValue_static = 1000;//★7.静的メンバ変数利用 プライベートへのアクセスは駄目。
 
   printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static);
 
   printf("CStaticMemberVar001::mpub_nValue_static = %d\n",CStaticMemberVar001::mpub_nValue_static);
  
77行: 83行:
 
}
 
}
 
</syntaxhighlight>
 
</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>
 +
★1.と★2.部分で静的メンバ変数を定義しました。★3.★4.部分で実体化しています。クラスのプログラミング部分であるStaticMemberVar001.cppのスコープ外で実体化しています。そして★6.ではメイン関数からパブリックとしてアクセス指定子を割り振った静的メンバ変数の呼び出しをしています。★7.の部分からはプライベートな静的メンバ変数にはアクセスできません。アクセス指定子は静的なメンバ変数に対しても通常のメンバ変数同様の効力を持ちます。★5.のようにクラス内からであれば、名前スコープ解決演算子も必要なく、プライベートな静的メンバ変数にアクセスできます。実体化した変数に対して、アロー演算子やドットによる選択演算子を使って呼び出しすることもできますが、複数の実体化した変数であってもすべて一つの変数ですので、同じものを呼び出していることになります。
 +
 +
 +
[[C PlusPlus#C++からの技術|C++]]に戻る

2021年2月6日 (土) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス