ホームに戻る
 const変数とconstクラスとconst関数

#include <iostream>

/*
*
*   const変数とconstクラスとconst関数
*
*   const変数は初期化時に値を設定し、
*   変更しようとするとコンパイルエラーになります。
*   const の位置で意味が変わる場合があります。
*
*   const char *buffer; データが const
*   char* const buffer; ポインタが const
*
*   constをつけることで新しい型の定義となります。
*   つまり int と const int は違う型です。
*   int 型が引数の関数に const int 型でオーバーライドするので注意。
*
*   constクラスはconst変数のクラス版です。
*
*   ただconstクラスはどのメンバ関数が、
*   メンバ変数に変更を加えているか判断できません。
*   よってconst関数が呼んでも安全なメンバ関数には、
*   constをつけたconst関数として明示します。
*
*/

class A{
  enum{num1 = 3};
  int num;
public:
  A() : num(num1){};
  void setNum(const int n){this->num = n;}  // n は変更不可
  const int getNum() const {return this->num;}  // const関数
};

using namespace std;

int main(){
  A a;
  const A ca;
  const int n = 2;

  //n = 4;  これはエラー

  a.setNum(n);
  //ca.setNum(n);  これはエラー

  cout << a.getNum() << endl;
  cout << ca.getNum() << endl; // エラーにならない

  return 0;
}

 結果

2
3

inserted by FC2 system