比較表
比較基準 | 非公開 | 保護されています |
---|---|---|
派生クラスへのプロパティの継承 | 派生クラスは基本クラスのプライベートメンバにアクセスできません。 | 派生クラスは基本クラスの保護されたメンバーにアクセスできます。 |
アクセシビリティ | クラスの非公開メンバーは、クラスの範囲外ではアクセスできません。 | クラスの保護されたメンバーは、すぐに派生したクラスを除き、クラススコープ外ではアクセスできません。 |
自分のクラスからアクセス可能 | はい | はい |
派生クラスからアクセス可能 | いいえ | はい |
外部からアクセス可能 | いいえ | いいえ |
プライベートの定義
非公開として宣言されたクラスメンバは、クラス内でのみ取得できます。 つまり、クラスのプライベートセクションで宣言されたメンバは、クラスのフレンド関数とメンバ関数によってのみアクセスできます。 非公開メンバーは派生クラスに直接取得できず、クラスの範囲外ではアクセスできません。
C ++プログラムは、プライベートアクセス指定子の概念を示しています。
#名前空間stdを使用します。 クラスA {private:int i; public:void get(){cout <> i; ;}}; クラスB:公開A {公開:void show(){i ++; cout << "\ n incrementcppの後に入力した数字">#using using namespace std; class mammal {public:void mammalMethod(void){cout << "哺乳類のカテゴリーに属します。" <上記のプログラムでは、子クラスの1つのオブジェクトが「ob」という名前で作成され、子クラスのメソッド「marine_mammalMethod」を呼び出すことで親クラスのメンバー関数にアクセスできます。 ただし、親メソッドにオブジェクト「ob」を使って直接アクセスすることはできません。
保護の定義
クラス内で保護されていると宣言されたクラスメンバは、そのクラスのメンバ関数とフレンド関数を介してのみアクセスできます。 これらの保護されたメンバーは、子クラス(ただちにそれから派生したもの)を除いて、クラススコープ外からはアクセスできません。 それは継承において制限された目的を果たし、限られた方法でプロパティを継承します。
下記のC ++プログラムは、保護されたアクセス指定子の概念を示しています。
#名前空間stdを使用します。 class account1 {protected:int x、y; //派生クラスにアクセス可能public:void set(int a、int b){x = a; y = b。 void show(){cout <上記の例では、データメンバがpublicまたはprotectedとして宣言されているため、子クラスは基本クラスのプロパティを継承します。 xとyが基本クラスの中でprivateとして宣言されていたならば不可能です。
C ++で非公開と保護の主な違い
- protectedキーワードを使用すると、そのクラス専用のクラスメンバーを構築できますが、派生クラスで継承および使用できます。 逆に言えば、privateメンバーを派生クラスに直接継承することはできないため、privateを使用している間はこれは不可能です。
- 基底クラスがprivateアクセス指定子を使って継承されると、基底クラスのすべてのpublicメンバーとprotectedメンバー、派生クラスの非公開メンバーになります。 反対に、これは保護されたアクセス指定子には当てはまりません。
結論
privateとprotectedは、クラスとそのメンバの可視性を異なる方法で設定するために使用されるアクセス指定子です。 ただし、保護はプライベートよりも柔軟性があります。