クラスのメンバ関数には、データの読み込み専用など、メンバ変数の値をまったく変更する必要のないメンバ関数が存在する場合があります。
この読み込み専用のメンバ関数の場合、メンバ変数の値をあらかじめ変更できないように、定数のメンバ関数として宣言しておくと安全です。
#include<iostream>
class echo {
public:
int years_old;
// コンストラクタ
echo(int old) {
years_old = old;
}
// チェック
int check() const {
//years_old = 10; // メンバ変数を変更。
// constメンバ関数なので、上記文を有効にするとコンパイルエラー
if(years_old >= 20)
return 1;
else
return 0;
}
// 表示
void display() {
std::cout << years_old << " : OK\n";
}
};
int main() {
while (true) {
int num;
std::cout << "Enter number : \n";
std::cin >> num;
echo a_echo(num);
if (a_echo.check())
a_echo.display();
else
std::cout << "Under 19 : NOT OK" << "\n";
}
return 0;
}
上記コードでは、メンバ関数check()が、constで定数メンバ関数となっています。
したがって、このcheck()の中では、クラス内のメンバ変数を変更することはできません。
「//years_old = 10; // メンバ変数を変更。」の一文を有効にしますと、コンパイルエラーとなります。
以下、実行結果です。
Enter number : 23 23 : OK Enter number : 45 45 : OK Enter number : 18 Under 19 : NOT OK
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/246