Cpp クラス 継承 アクセス指定子

提供:yonewiki

C++に戻る


本来の表記は「C++ クラス 継承 アクセス指定子」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ クラス 継承 アクセス指定子になっています。

クラス 継承 アクセス指定子

 継承におけるアクセス指定子は、基底クラスから派生クラスに対して、メンバのアクセス権を制御するためのものです。C++では、3つのアクセス指定子が存在します:public、protected、およびprivate。それぞれのアクセス指定子には、基底クラスからの派生クラスへのメンバの影響が異なります。


1.public継承:

 public継承では、基底クラスのpublicメンバは、派生クラスでpublicメンバとして継承されます。 基底クラスのprotectedメンバは、派生クラスでprotectedメンバとして継承されます。 基底クラスのprivateメンバは、派生クラスではアクセス不可能です。


class Base {
public:
    int publicMember;
protected:
    int protectedMember;
private:
    int privateMember;
};

class Derived : public Base {
    // publicMemberはそのまま継承される
    // protectedMemberもprotectedとして継承される
    // privateMemberは継承されない
};


2.protected継承:

 protected継承では、基底クラスのpublicメンバは、派生クラスでprotectedメンバとして継承されます。 基底クラスのprotectedメンバは、派生クラスでprotectedメンバとして継承されます。 基底クラスのprivateメンバは、派生クラスではアクセス不可能です。


class Base {
public:
    int publicMember;
protected:
    int protectedMember;
private:
    int privateMember;
};

class Derived : protected Base {
    // publicMemberはprotectedとして継承される
    // protectedMemberもprotectedとして継承される
    // privateMemberは継承されない
};


3.private継承:

 private継承では、基底クラスのpublicメンバもprotectedメンバも、派生クラスではprivateメンバとして継承されます。 基底クラスのprivateメンバは、派生クラスではアクセス不可能です。


class Base {
public:
    int publicMember;
protected:
    int protectedMember;
private:
    int privateMember;
};

class Derived : private Base {
    // publicMemberはprivateとして継承される
    // protectedMemberもprivateとして継承される
    // privateMemberは継承されない
};


  • アクセス指定子は、基底クラス内でのメンバのアクセス範囲を指定し、それが派生クラスでどのように継承されるかを制御します。


  • public継承が一般的で、基底クラスのpublicメンバは派生クラスでもpublicメンバとして使えるようになります。


  • protectedやprivate継承は、特定のケースで利用されることがありますが、基本的には注意して使う必要があります。


  • アクセス指定子は、クラスのカプセル化(隠蔽)の原則を守り、プログラムの保守性と拡張性を向上させるのに役立ちます。


 

C++に戻る