クラスAがあり、プライベートとして宣言されたフィールドvalがあります。 Aから継承し、valにアクセスできるクラスBを宣言します。 C++でそれを行う方法はありますか?
Aコードをまったく変更せずに、Aの一部の機能をオーバーロードする必要があるため、これを実行したいと思います。
ありがとう。
クイックアンサー:しません。これがprotected
キーワードの目的です。サブクラスへのアクセスを許可し、それ以外には許可しない場合に使用します。
private
は、サブクラスではなく、これらの変数に誰もアクセスできないことを意味します。
A
のコードをまったく変更できない場合は、その変数にpublic
/protected
アクセスメソッドがある可能性があります。それ以外の場合、これらの変数はサブクラスからアクセスされることを意図しておらず、ハックのみが助けになります(これはお勧めしません!)。
基本クラスのプライベートメンバーは、基本メンバー関数によってのみアクセスできます(派生クラスではありません)。だから、あなたはそうする機会さえない権利を持っていません:)
class Base
基本クラスにアクセスできる場合は、クラスBを friend class として宣言できます。しかし、他の人が説明したように、あなたができるからといって、それが良いアイデアだということではありません。派生クラスからアクセスできるようにする場合は、保護されたメンバーを使用します。
これは今週の第一人者の説明どおりに実行可能です。 GotW#76-アクセス権の使用と乱用 。しかし、それは最後の手段と考えるべきです。
protected
として定義する必要があります。保護されたメンバーは子クラスに継承されますが、外部からはアクセスできません。