定数のconstメンバ関数をクラスに宣言

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

クラスのメンバ関数には、データの読み込み専用など、メンバ変数の値をまったく変更する必要のないメンバ関数が存在する場合があります。
この読み込み専用のメンバ関数の場合、メンバ変数の値をあらかじめ変更できないように、定数のメンバ関数として宣言しておくと安全です。

#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

日時: 2008年06月09日 14:33
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/246

この記事にトラックバックされる方は、参照先が分かるようにするために、「定数のconstメンバ関数をクラスに宣言」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - C言語とC++勉強ルーム