- ベストアンサー
クラスの実装のconst
int CClassTest::FuncA() const { (省略) } 上記のC++の記述があったとして、この場合の「const」ってどのような意味があるのでしょうか? 何がconstになるのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、 class CClassTest { private: int Member; public: int FuncA(); int FuncA() const; }; とのクラスで、 CClassTest test_a; CClassTest const test_b; とのインスタンスである場合に、 test_a.FuncA()は非const関数が、test_b.FuncA()はconst関数が呼ばれます。const関数内ではメンバ変数を変更することができない(例えばint FuncA() constの中ではMemberの値を変更することができない)ことから、「クラスの状態(メンバ変数)がconstになる」と考えることができるのでしょうか。test_bはconstとしているのですから、その状態が変更されては困るということでしょうか。
その他の回答 (1)
- nitscape
- ベストアンサー率30% (275/909)
普段constは定数のように一定の値を取るときに使いますよね。それと同じような感じで「class内のメンバ変数に変更を加えない」という意味です。 どんなときに使うかと言うと例えば class CAAA { int m_nData; public: CAAA() { m_nData = 0; } bool IsZero(void) const { return m_nData == 0 ? true : false; } }; こんなクラスがあったとします。 このクラスを使っているうちに bool Check(const CAAA& ccc) { return ccc.IsZero(); } Check関数ではCAAAの中身を改変しないからconst参照で渡そうなんてすると...IsZero関数にconst指定がないとエラーになります。
お礼
なるほどです。 型チェックでエラーになってくれるんですね。 ありがとうございます。
お礼
インスタンス宣言により呼ばれるメンバ関数が異なるのですね。 ありがとうございます。