Cpp クラス constのソースを表示
新しいページはコチラ
移動:
案内
,
検索
<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++ クラス const</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> </tr> </table> ※このページでは[[C PlusPlus|C++]]にのみ存在する機能として、記事タイトルが<nowiki>C++ クラス const</nowiki>になっています。<br /> <br /> == '''クラス const''' == クラスとconstキーワードの関係について、この項目で記述したいと思います。変数で使っていたconstキーワードとはまた違った使い方をしますが、基本的な理念は同じです。つまりは変数の中に格納した値を初期化や初期値から変更されないように定数化・保護するということを目的としています。変えられたくない。変えられると動かなくなる。とか、変えられても大丈夫なようにチェックするということから解放されたい。こういったプログラマの都合により使われるキーワードです。 constキーワードは大きなクラスや標準的に配布されるプログラムでも積極的に使われていますので、クラスに関連するところで、このキーワードが使われた時、どういった効力があって、何がどのていど保護されるのかを理解しておかないと、値を変更する手順の考え方の齟齬がクラス開発者とそれを利用する人の中で発生したり、クラス開発者自身の中でうまく、保護がかけられていない状態になったりします。 [[C キャスト|キャスト]]の記事でもconst外しの解説あたりで、ポインタの中身のconstとポインタ変数自身のconstについて紹介しましたが、ここでも改めてconstの基本について復習しておきます。 *'''定数変数の定義''' :const int nSize = 1000; :もしくは :int const nSize = 1000; *'''ポインタでの定数変数(アドレス差し替えによる中身の変更発生はOK)''' :const int* pnSize = &pnSize2; :もしくは :int const * pnSize = &pnSize2; const宣言されていないポインタ変数に上記のような方法で宣言された変数のアドレスを代入することもできません。その代入して移し替えたポインタ変数から中身が変更される可能性が生じるためです。 *'''アドレス変更できないポインタでの定数変数''' :const int * const pnSize = new int(1000); :もしくは :int const * const pnSize = new int(1000); となります。そしてキャストでは、このconst外しなる、奥の手があることも説明しました。つまり、constは保護したつもり程度の役割であって、完璧ではない。どうしても変更させないようにするには、自分でチェックするプログラムを組むのが良いかと思いますが、あまり根を詰めないほうがいいと思う。プログラムがどう使われるものなのかによって、その厳しさを変えていくくらいの態度でよいのだと感じます。 それではクラスにおけるconstにはどのようなものがあるのか見てみましょう。 クラスにおけるconstのだいたいのことがわかるサンプルを作ってみました。 CConst001.h <syntaxhighlight lang="cpp" line start="1"> #pragma once class CConst001 { private: const int m_constnValue; const int m_constnValue2; int m_nValue; public: const int mpub_constnValue; void mfpub_Set_m_nValue(int nPara1); void mfpub_Set_m_nValueConstPara(int nPara1); int mfpub_Get_m_nValue(); int mfpub_Get_m_nValue() const; int mfpubconst_Get_m_nValue() const; CConst001(void); ~CConst001(void); }; </syntaxhighlight> CConst001.cpp <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "Const001.h" void CConst001::mfpub_Set_m_nValue(int nPara1){ nPara1 = mpub_constnValue; m_nValue = 1000; printf("mfpub_Set_m_nValue\n", mpub_constnValue); printf("m_nValue =%d\n", m_nValue); printf("mpub_constnValue=%d\n", mpub_constnValue); } void CConst001::mfpub_Set_m_nValueConstPara(const int nPara1){ //nPara1 = mpub_nValue;★const付きの引数は関数内で変更できない。 m_nValue = 1000; printf("mfpub_Set_m_nValueConstPara\n", mpub_constnValue); printf("m_nValue =%d\n", m_nValue); printf("mpub_constnValue=%d\n", mpub_constnValue); } //★const付きのオブジェクトからは呼び出し不可能な関数 int CConst001::mfpub_Get_m_nValue(){ m_nValue = 10; return m_nValue; } //★const付きのオブジェクトからも呼び出し可能な関数 constメンバ関数 int CConst001::mfpubconst_Get_m_nValue() const{ //mpub_nValue = 10;★constメンバ関数ではメンバ変数の変更は出来ない。 return m_nValue; } //★constメンバ関数はオーバーロードできます。 int CConst001::mfpub_Get_m_nValue() const{ //mpub_nValue = 10;★constメンバ関数ではメンバ変数の変更は出来ない。 return m_nValue; } CConst001::CConst001(void):mpub_constnValue(0),m_constnValue(0),m_constnValue2(0)//★constメンバ変数の初期化 const以外も初期化できる。 { //mpub_constnValue = 100;★コンストラクタでもconstメンバ変数への代入はできない。 } CConst001::~CConst001(void) { } </syntaxhighlight>
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス const
に戻る。
個人用ツール
3.138.105.128
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ