2011-12-08 6 views
0

メソッドが引数を持たないため、メソッドがアクセスできるだけでなく、C++クラスのインスタンスでprivateデータメンバを変更できないようにする方法を教えてください。私は、図形を描画するプログラムを書いています、と私は、このC++のクラスメソッド

void drawCircle() const; 

を試してみましたが、私は、データメンバーが変わらないかどうかを判断することができませんでした。ありがとう

答えて

7

メンバー関数const(あなたの例のように)を宣言すると、(暗黙の)thisポインタを介してメンバー変数は変更されません。コンパイラはこれを強制します。

だから、次はコンパイルされません。

class Foo 
{ 
public: 
    void drawCircle() const 
    { 
     x = 5; // equivalent to this->x = 5; and this is const here 
    } 
private: 
    int x; 
}; 

もちろん、それはあなたがconstのネスを離れてキャストのようなトリックをプレイ防ぐことはできません。

関連する問題