メンバーアクセス制御
メンバーのスコープ:インデックス への移動
クラスのメンバーは,デフォルト(クラスキーワードと宣言配置に依存する)のアクセス属性,あるいは 3 つのアクセス指定子(public,private,および protected)のどれか 1 つによって決まるアクセス属性を持つことになります。各属性の意味は以下のとおりです。
- public: あらゆる関数からメンバーを使用できる
- private: メンバーは,そのクラス内で宣言されたメンバー関数およびフレンドからのみ使用できる
- protected:private と同じ内容 さらに,宣言されたクラスから派生したクラスのメンバー関数およびフレンドから使用できるが,派生型のオブジェクト内に限られる (派生クラスは基本クラス,派生クラスのアクセスで解説)
メモ: フレンド関数宣言は,アクセス指定子の影響を受けません(クラスのフレンドを参照)。
クラスのメンバーはデフォルトでは private なので,このデフォルトをオーバーライドするためには,明示的に public あるいは protected アクセス指定子を使う必要があります。
struct のメンバーはデフォルトでは public ですが,これを private あるいは protected アクセス指定子を使ってオーバーライドすることができます。
union のメンバーはデフォルトで public であり,これは変更できません。共用体メンバーに対しては,3 つのアクセス指定子はどれも使用できません。
デフォルトのあるいはオーバーライドしたアクセス修飾子は,別のアクセス修飾子に出会うまで,後続するすべてのメンバー宣言に対して効力を持ちます。次に例を示します。
class X {
int i; // X::i はデフォルトで private
char ch; // X::ch も同じ
public:
int j; // この 2 つは public
int k;
protected:
int l; // X::l は protected
};
struct Y {
int i; // Y::i はデフォルトで public
private:
int j; // Y::j は private
public:
int k; // Y::k は public
};
union Z {
int i; // デフォルトで public。変更不可
double d;
};
メモ: アクセス指定子は,任意の順序で並べたり,好きなようにグループ分けしたりすることができます。すべての private メンバーを一緒に宣言すれば,入力の手間を省くことができます。