privateメンバ変数へのアクセス
C++(JavaやC#などにもありますが)には,アクセス制御を行うための予約語が用意されています.
アクセス制御
public, protected, private
クラスメンバと継承のアクセス制御に用いられる。
- publicはクラスの外部からも自由にアクセスできる。
- protectedは宣言したクラス自身とその派生クラスからアクセスできる。
- privateは宣言したクラスの内部からしかアクセスできない。
このアクセス制御に関して,少し前にコーディングしていたときに気になったことがありました.
class xxx {
public:
xxx& operator=(const xxx& x) { value_ = x.value_; }
・・・(中略)・・・
private:
value_type value_;
}
以前から,privateメンバ変数が存在するクラスのコピーコンストラクタや代入演算子はどうやって定義するのだろう と思っていたのですが,上記のコードでも問題なくコンパイルが完了しました.不思議に思い少し調べてみたところ, 以下の記述が見つかりました.
同じクラスなら、他のインスタンスの private メンバ変数にアクセスできる。 これは、Java や C# など他の多くの言語でも同様の仕様だが、できないと思い込んでいないだろうか
なるほど,そういう仕様だったのですね.指摘通り,privateメンバ変数にはアクセスできないと思い込んでいました.