Cpp クラス const 新しいページはコチラ
提供: yonewiki
(→constメンバ関数) |
|||
105行: | 105行: | ||
− | CConst001::CConst001(void):mpub_constnValue(0),m_constnValue(0),m_constnValue2(0)// | + | CConst001::CConst001(void):mpub_constnValue(0),m_constnValue(0),m_constnValue2(0)//★10.constメンバ変数の初期化 const以外も初期化できる。 |
{ | { | ||
− | //mpub_constnValue = 100; | + | //mpub_constnValue = 100;★11.コンストラクタでもconstメンバ変数への代入はできない。 |
} | } | ||
125行: | 125行: | ||
CConst001* CConst001_Instance = new CConst001;//★5. | CConst001* CConst001_Instance = new CConst001;//★5. | ||
CConst001_Instance->mfpub_Set_m_nValue(1000); | CConst001_Instance->mfpub_Set_m_nValue(1000); | ||
− | //CConst001_Instance->mpub_constnValue = 1000; | + | //CConst001_Instance->mpub_constnValue = 1000;★8.constメンバ変数の呼び出しは出来ない。 |
const CConst001* CConst001_constInstance = new CConst001;//★6. | const CConst001* CConst001_constInstance = new CConst001;//★6. | ||
CConst001_constInstance->mfpubconst_Get_m_nValue(); | CConst001_constInstance->mfpubconst_Get_m_nValue(); | ||
− | + | CConst001_constInstance->mfpub_Get_m_nValue();//★9.constメンバ関数以外も呼び出せる。 | |
return 0; | return 0; | ||
157行: | 157行: | ||
==constメンバ関数== | ==constメンバ関数== | ||
− | ★2.★3.★4.の部分の内、★3.★4.のように関数名の最後にconstと記述するようなメンバ関数をconstメンバ関数と呼んでいます。メイン関数側の★6.部分のように呼び出し側のクラスオブジェクトそのものがすでにconstで定義されているか、どうかによって動作が変わる関数と考えていいと思います。★6.部分のようにconstで定義されている場合には★3.や★4.のようなconstメンバ関数として、メンバ関数内でメンバ変数を書き換えないことを保証した関数しか呼び出すことが出来ないオブジェクトになっています。★5.部分のようなconstで定義されていないオブジェクトであれば、★2.でも★3.でも★4. | + | ★2.★3.★4.の部分の内、★3.★4.のように関数名の最後にconstと記述するようなメンバ関数をconstメンバ関数と呼んでいます。メイン関数側の★6.部分のように呼び出し側のクラスオブジェクトそのものがすでにconstで定義されているか、どうかによって動作が変わる関数と考えていいと思います。★6.部分のようにconstで定義されている場合には★3.や★4.のようなconstメンバ関数として、メンバ関数内でメンバ変数を書き換えないことを保証した関数しか呼び出すことが出来ないオブジェクトになっています。★5.部分のようなconstで定義されていないオブジェクトであれば、★2.でも★3.でも★4.でも、つまりconstメンバ関数であっても、★9.部分のように、そうでなくても呼び出すことはできます。★2.と★4.のように同じ関数名でconstメンバ関数か、そうでない普通のメンバ関数かだけが違うような同名の関数を定義できます。同名の関数がある場合は、特にどちらを呼び出すかを指定しなくてもオブジェクトがconstであれば、constメンバ関数が選ばれて呼び出されます。通常のオブジェクトなら通常のメンバ変数が選ばれて呼び出されます。 |
− | + | constにはconstを!constでなければconstでないものをという感じです。★8.部分のごとくです。 | |
167行: | 167行: | ||
プロトタイプ宣言(xxx.hファイル側の記述)をするときにもconstメンバ関数には、関数名の定義の後ろにconstのキーワードを記述する必要があります。 | プロトタイプ宣言(xxx.hファイル側の記述)をするときにもconstメンバ関数には、関数名の定義の後ろにconstのキーワードを記述する必要があります。 | ||
+ | |||
+ | |||
+ | ==constメンバ変数== | ||
+ | constが定義されたクラス内のメンバ変数をconstメンバ変数と呼ぶような決まりは特にないですが、constが定義されたメンバ変数はコンストラクタの記述によって初期化をしなければ、初期値を与えることができません。初期値を与えるには★10.部分の方法でしか初期値を与えることはできません。★11.部分のようにコンストラクタ内で代入するような形式でも駄目だし、ヘッダファイル側のメンバ変数宣言のところで初期値を代入することでも初期値を与えることはできません。 | ||
+ | |||
+ | |||
+ | '''CConst001::CConst001(void):mpub_constnValue(0),m_constnValue(0),m_constnValue2(0)''' | ||
+ | |||
+ | |||
+ | コンストラクタの関数の後に : を記述して、その後ろに引数を定義していきます。文字あるいは文字列のような一重引用符や二重引用符のリテラルを()の中に記述することもできます。この初期化は特にconstでないメンバ変数でなくても初期化できます。面倒ですが…。 | ||
+ | |||
+ | |||
+ | 長い文章になってしまいましたが、概ねの説明は完了です。 |