• ベストアンサー

クラスの実装のconst

int CClassTest::FuncA() const { (省略) } 上記のC++の記述があったとして、この場合の「const」ってどのような意味があるのでしょうか? 何がconstになるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • kary
  • ベストアンサー率55% (10/18)
回答No.1

例えば、 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としているのですから、その状態が変更されては困るということでしょうか。

mtsed
質問者

お礼

インスタンス宣言により呼ばれるメンバ関数が異なるのですね。 ありがとうございます。

その他の回答 (1)

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

普段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指定がないとエラーになります。

mtsed
質問者

お礼

なるほどです。 型チェックでエラーになってくれるんですね。 ありがとうございます。

関連するQ&A