問題タブ [private-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - プライベート ベースのすべてのメンバーを継承クラスのパブリック スコープにプルできますか?
public: using Base::member;
基底クラスから非公開で継承する場合、その (非公開の) メンバーを継承クラス内で公開すると言えます。これを拡張してすべてのメンバーを一度に取得する方法はありますか? これが必要なコンテキストは、コードの重複を避けるために使用している CTRP 設定です。
例:
Base のパブリック メンバーのみを選択でき、保護されたメンバーやプライベート メンバーを選択できなかった場合はさらに良いでしょう。これは単なるボーナスになります。
c++ - なぜ C++ は、プライベートな親のこのポインター ポリモーフィズムを許可するのですか?
基底クラスから非公開で派生クラスを継承すると、継承したクラスのポリモーフィズムを取得できません。
しかし、派生クラス内で「this」ポインターのポリモーフィズムを取得できます。
'this' ポインターがそのプライベートな親へのポリモーフィズムを許可されている理由について非常に興味がありますが、クラス外のポインターは許可されていません。
前もって感謝します!
=========
明確にするために編集します。すべての答えをありがとう。私の質問を明確にするために、C ++がこの動作を許可している場合、カプセル化に少し違反していると思います。
より明確なケース:
Base クラスのオブジェクトは Derived クラスのオブジェクトの親オブジェクト部分にしか存在しませんが、Derived クラスは Base クラスをprivatelyに継承します。つまり、Derived クラスのオブジェクトは Base クラスのオブジェクトをprivatelyに持つことになります。
上記のコードは Derived クラスのカプセル化規則に違反していますが、コンパイル時に警告すら出ません。
私の意見では、この状況下では明示的なキャストを使用するか、コンパイル中に警告を出す必要があります。