Private Access
Home >> Note >> Private Access

privateメンバ変数へのアクセス

C++(JavaやC#などにもありますが)には,アクセス制御を行うための予約語が用意されています.

アクセス制御
public, protected, private
クラスメンバと継承のアクセス制御に用いられる。
  1. publicはクラスの外部からも自由にアクセスできる。
  2. protectedは宣言したクラス自身とその派生クラスからアクセスできる。
  3. privateは宣言したクラスの内部からしかアクセスできない。

このアクセス制御に関して,少し前にコーディングしていたときに気になったことがありました.

class xxx {
public:
    xxx& operator=(const xxx& x) { value_ = x.value_; }
    
    ・・・(中略)・・・
private:
    value_type value_;
}

以前から,privateメンバ変数が存在するクラスのコピーコンストラクタや代入演算子はどうやって定義するのだろう と思っていたのですが,上記のコードでも問題なくコンパイルが完了しました.不思議に思い少し調べてみたところ, 以下の記述が見つかりました.

同じクラスなら、他のインスタンスの private メンバ変数にアクセスできる。 これは、Java や C# など他の多くの言語でも同様の仕様だが、できないと思い込んでいないだろうか
ViVi&Vine

なるほど,そういう仕様だったのですね.指摘通り,privateメンバ変数にはアクセスできないと思い込んでいました.