privateアクセス

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

アクセス制御
public, protected, private
クラスメンバと継承のアクセス制御に用いられる。

  1. publicはクラスの外部からも自由にアクセスできる。
  2. protectedは宣言したクラス自身とその派生クラスからアクセスできる。
  3. privateは宣言したクラスの内部からしかアクセスできない。
キーワード (C++) - Wikipedia

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

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

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

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

http://www.vivi-vine.org/

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