Cpp クラス const 新しいページはコチラ
提供: yonewiki
(→クラス const) |
|||
93行: | 93行: | ||
//★3.const付きのオブジェクトからも呼び出し可能な関数 constメンバ関数 | //★3.const付きのオブジェクトからも呼び出し可能な関数 constメンバ関数 | ||
int CConst001::mfpubconst_Get_m_nValue() const{ | int CConst001::mfpubconst_Get_m_nValue() const{ | ||
− | //mpub_nValue = 10; | + | //mpub_nValue = 10;★7.constメンバ関数ではメンバ変数の変更は出来ない。 |
return m_nValue; | return m_nValue; | ||
} | } | ||
100行: | 100行: | ||
//★4.constメンバ関数はオーバーロードできます。 | //★4.constメンバ関数はオーバーロードできます。 | ||
int CConst001::mfpub_Get_m_nValue() const{ | int CConst001::mfpub_Get_m_nValue() const{ | ||
− | //mpub_nValue = 10; | + | //mpub_nValue = 10;★7.constメンバ関数ではメンバ変数の変更は出来ない。 |
return m_nValue; | return m_nValue; | ||
} | } | ||
145行: | 145行: | ||
+ | ==引数== | ||
4行目と12行目の関数では、メンバ関数の引数にconstがあるかないかの違いになっています。メンバ関数のプロトタイプ宣言(xxx.hファイルの方の記述)ではconstをつけてもつけなくても、効力はありません。 | 4行目と12行目の関数では、メンバ関数の引数にconstがあるかないかの違いになっています。メンバ関数のプロトタイプ宣言(xxx.hファイルの方の記述)ではconstをつけてもつけなくても、効力はありません。 | ||
152行: | 153行: | ||
'''void CConst001::mfpub_Set_m_nValueConstPara(const int nPara1){''' | '''void CConst001::mfpub_Set_m_nValueConstPara(const int nPara1){''' | ||
− | |||
★1.部分のようにnPara1という引数の中身を関数の中で書き換えて利用するようなことがconst付きの方では出来なくなっています。もちろん呼び出す側の引数部分においては、constであろうとconstで無かろうと問題にはなりません。但し呼び出す側で既にconstになっているポインタ型変数や参照型変数をconstになっていない引数をうけとる関数を呼び出すことは違反です。中身が書き換わってしまう可能性があるからです。このあたりのやりとりに関する規則を具体的に理解するには、そのイメージを説明する絵があった方がわかりやすいのかもしれません。 | ★1.部分のようにnPara1という引数の中身を関数の中で書き換えて利用するようなことがconst付きの方では出来なくなっています。もちろん呼び出す側の引数部分においては、constであろうとconstで無かろうと問題にはなりません。但し呼び出す側で既にconstになっているポインタ型変数や参照型変数をconstになっていない引数をうけとる関数を呼び出すことは違反です。中身が書き換わってしまう可能性があるからです。このあたりのやりとりに関する規則を具体的に理解するには、そのイメージを説明する絵があった方がわかりやすいのかもしれません。 | ||
==constメンバ関数== | ==constメンバ関数== | ||
− | ★2.★3.★4.の部分の内、★3.★4. | + | ★2.★3.★4.の部分の内、★3.★4.のように関数名の最後にconstと記述するようなメンバ関数をconstメンバ関数と呼んでいます。メイン関数側の★6.部分のように呼び出し側のクラスオブジェクトそのものがすでにconstで定義されているか、どうかによって動作が変わる関数と考えていいと思います。★6.部分のようにconstで定義されている場合には★3.や★4.のようなconstメンバ関数として、メンバ関数内でメンバ変数を書き換えないことを保証した関数しか呼び出すことが出来ないオブジェクトになっています。★5.部分のようなconstで定義されていないオブジェクトであれば、★2.でも★3.でも★4.でも、つまりconstメンバ関数であっても、そうでなくても呼び出すことはできます。★2.と★4.のように同じ関数名でconstメンバ関数か、そうでない普通のメンバ関数かだけが違うような同名の関数を定義できます。同名の関数がある場合は、特にどちらを呼び出すかを指定しなくてもオブジェクトがconstであれば、constメンバ関数が選ばれて呼び出されます。通常のオブジェクトなら通常のメンバ変数が選ばれて呼び出されます。constにはconstを!constでなければconstでないものをという感じです。constメンバ関数がなければconstが定義されたオブジェクトからの呼び出しはエラーになります。もちろんconstメンバ関数内で★7.部分のようにメンバ変数を呼び出して、変数の中身を変更するような処理を記述することはできません。 |