メンバーアクセス制御

提供: Appmethod Topics
移動先: 案内検索

メンバーのスコープ:インデックス への移動

クラスのメンバーは,デフォルト(クラスキーワードと宣言配置に依存する)のアクセス属性,あるいは 3 つのアクセス指定子(publicprivate,および protected)のどれか 1 つによって決まるアクセス属性を持つことになります。各属性の意味は以下のとおりです。

  • public: あらゆる関数からメンバーを使用できる
  • private: メンバーは,そのクラス内で宣言されたメンバー関数およびフレンドからのみ使用できる
  • protectedprivate と同じ内容 さらに,宣言されたクラスから派生したクラスのメンバー関数およびフレンドから使用できるが,派生型のオブジェクト内に限られる (派生クラスは基本クラス,派生クラスのアクセスで解説)

メモ:  フレンド関数宣言は,アクセス指定子の影響を受けません(クラスのフレンドを参照)。

クラスのメンバーはデフォルトでは 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 メンバーを一緒に宣言すれば,入力の手間を省くことができます。

関連項目