メンバのアクセス制御
メンバのスコープ:インデックス への移動
クラスのメンバには、デフォルトで(class キーワードと宣言の配置による)、あるいは 3 つのアクセス指定子(public、private、protected)のいずれかを用いることで、アクセス属性が与えられます。これらの属性の意味は次のとおりです。
- public: そのメンバは、どのような関数からでも使用することができます。
- private: そのメンバは、その宣言元クラスのメンバ関数およびフレンドからのみ使用することができます。
- protected: private の場合と同じです。さらに、メンバは、宣言されているクラスから派生したクラスのメンバ関数およびフレンドからも使用することができますが、それができるのは、派生型のオブジェクト内に限られます。なお、派生クラスについては、「基底クラスと派生クラスへのアクセス」で説明しています。
メモ: フレンド関数宣言は、アクセス指定子には影響されません(詳細は、「クラスのフレンド」を参照)。
クラスのメンバはデフォルトでは private なので、このデフォルトをオーバーライドするには、public または protected アクセス指定子を明示する必要があります。
struct(構造体)のメンバはデフォルトでは public ですが、これを private または protected アクセス指定子でオーバーライドすることができます。
union(共用体)のメンバはデフォルトでは public であり、これは変更できません。共用体のメンバに対しては、3 つのアクセス指定子はすべて無効です。
デフォルトのアクセス修飾子やオーバーライドするアクセス修飾子は、別のアクセス修飾子が検出されるまで、後続のすべてのメンバ宣言に対して引き続き有効です。以下に例を示します。
class X { int i; // X::i is private by default char ch; // so is X::ch public: int j; // next two are public int k; protected: int l; // X::l is protected }; struct Y { int i; // Y::i is public by default private: int j; // Y::j is private public: int k; // Y::k is public }; union Z { int i; // public by default; no other choice double d; };
メモ: アクセス指定子は、任意の順序で並べたりグループ化することができます。たとえば、すべての private メンバを一緒に宣言するなどして、入力の手間を省くことができます。