前のセクションでは、パブリック継承を使用した派生クラスの定義方法について説明しました。実際には、パブリック継承、プライベート継承、および保護された継承という 3 つの方法があります。
異なる継承メソッド間の主な違いは、派生クラスの基本クラスで異なるアクセス権を持つメンバーのアクセス権の変更にあります。以下に一つずつ紹介していきます。
1. パブリック継承:
パブリック継承モードでは、次のような特徴があります。
(1) 基本クラスのパブリック メンバーは、派生クラスでもパブリック メンバーのままです。もちろん、派生クラス内のメンバー関数と派生クラス オブジェクトの両方にアクセスできます。
(2) 基本クラスのプライベート メンバーには、派生クラスのメンバーまたは派生クラスのオブジェクトからアクセスできません。
(3) 基本クラスの保護されたメンバーは、派生クラスでも保護された型のままであり、派生クラスのメンバー関数を通じてアクセスできますが、派生クラスのオブジェクトにはアクセスできません。
2. プライベート継承:
プライベート継承の場合、パブリック型、プライベート型、プロテクト型の 3 つのメンバーのアクセス権は次のとおりです。
(1) 基本クラスのパブリック型とプロテクト型は、派生クラスのプライベート継承によって吸収された後、派生クラスのプライベート型になります。つまり、これらはクラスのメンバー関数でアクセスできますが、クラスのメンバー関数ではアクセスできません。クラス外からアクセスできるようになります。
(2) クラス内外を問わず、派生クラスでは基本クラスのプライベート メンバーにアクセスできません。
プライベート派生の場合、基本クラスのプライベート メンバーは派生クラスまたは派生サブクラスでさえ使用できなくなり、意味を持たなくなることがわかります。そのため、この種の使用法は比較的まれです。
3. 継承を保護します。
保護された型の継承には次の特徴があります。
(1) 基底クラスのパブリック メンバーおよび保護型メンバーは、派生クラスの保護されたメンバーになります。
(2) 基本クラスのプライベート メンバーには、派生クラスで直接アクセスできません。
派生クラスのメンバー関数は、基本クラスのパブリック メンバーと保護されたメンバーにアクセスできますが、派生クラス オブジェクトを通じてクラスの外部からアクセスすることはできないことがわかります。同様に、基本クラスのプライベート メンバーには、派生クラスのメンバー関数やクラス オブジェクトを通じてアクセスできません。
以下では、基本クラスのさまざまな権限から派生したさまざまなタイプのアクセス問題を実験するために、時計と目覚まし時計のプログラム コードを例として取り上げています。パブリック型の場合、次のように、派生クラスのメンバー メソッド内またはクラス外で呼び出すことができます。コンパイルはエラーなしで実行されます。
ただし、プライベート メンバーの場合は、41 行目を参照してコード行を追加しようとします。派生クラスのメンバー関数では、基本クラスから吸収された H 変数が割り当てられ、コンパイル中にエラーが報告されます。以下の赤いボックスとプロンプトを参照してください。
「H はプライベート型です」というエラー メッセージが表示されます。
保護型の場合、基本クラスで保護型変数 w を定義し、それをパブリックに継承された派生クラス メソッドで割り当てて使用しようとします。以下の図で状況を確認できます。これは完全にアクセス可能です。以下に示すように:
プライベート継承の場合、パブリック型のメンバーはクラスの外部でアクセスされます。
独自に実験して、パブリック継承におけるさまざまなタイプのメンバーのアクセスを検証できます。
研究と実験を経て、次のように要約できます。
1. 基本クラスのプライベート メンバーには、派生権限に関係なく、派生クラス内またはクラス外のメンバー関数からアクセスできません。
2. プライベート継承。基本クラスの元の型が何であっても、派生クラスの外部のメンバー関数を通じてアクセスすることはできません。
3. 基底クラスから派生クラスに吸収されるメンバのアクセス権は、基底クラス内のアクセス権と派生時の派生権のうち最も低いアクセス権となります。
また、派生アクセス許可、基本クラスで定義されたアクセス許可、派生クラス内およびクラス外のさまざまなアクセス時間の組み合わせに基づいて、次の表がリストされます。
パブリック継承 | 保護された継承 | 私的継承 | ||||
訪問場所 | クラス内で | 授業外 | クラス内で | 授業外 | クラス内で | 授業外 |
パブリックメンバー | できる | できる | できる | できない | できる | できない |
メンバーを守る | できる | できない | できる | できない | できる | できない |
プライベートメンバー | できない | できない | できない | できない | できない | できない |