私はクラスAを持っていると私はクラスBを持っていると私はクラスB含まれない継承?
由来多く、多くのクラスを持って、私はこれを達成したい:Bの誘導体は、各Whithout A.の保護された変数へのアクセス権を持っている必要がありますその中にはAのインスタンスが含まれており、多くのメモリが必要です。 だから私は今公衆の継承は良い考えではないと思います。これをどうすれば解決できますか? ありがとう!
私はクラスAを持っていると私はクラスBを持っていると私はクラスB含まれない継承?
由来多く、多くのクラスを持って、私はこれを達成したい:Bの誘導体は、各Whithout A.の保護された変数へのアクセス権を持っている必要がありますその中にはAのインスタンスが含まれており、多くのメモリが必要です。 だから私は今公衆の継承は良い考えではないと思います。これをどうすれば解決できますか? ありがとう!
friend
とアクセサー機能で実行できます。これはA
の陰部をオフに滞在する信頼B
を行い - A
とB
間の継承関係がありますしない限り、のみB
とサブクラスがA
ののみ保護されたメンバーにアクセスできるようにする良い方法が表示されません。
class A {
friend class B;
protected:
int X;
};
class B {
protected:
static int getX(A const & a) { return a.X; }
};
class C : public B {
public:
void foo(A const & a) { int bar = getX(a); }
};
A
の非公開部分へのアクセス権を持つべきではない
すべては?そして、私がBから派生した新しいクラスを作ったら、それをクラスAの友達のリストに追加する必要がありますか?私はそれを拡張可能にしたい。そして、友人たちはプライベートのためにもアクセスできますが、これは必要ありません。 – nullzero
多くのクラスがAのプライベートメンバーにアクセスできるようにするには、パブリックメンバーかパブリックアクセサを使用する必要があります。いずれにしても、デザインを再考する必要があるという印があります。 – Adam
はい、すべてです。 Bの派生クラスがAの友人であると決めることができれば、情報隠蔽を回避するだろう。一方、Erikの解決策はより良いかもしれません。 – Oswald
私はB
の子どもたちを理解し、クラスA
に関係のないところでは、そのようなとしてAのBの友人から派生したクラスを作成します。
A
のデータにB
子クラスのデータを正しくアクセスするには、A
のパブリックインターフェイスが必要です。そのようなパブリックインターフェイスが適切でない場合、それは悪い設計の何かをしようとしているか、A
のパブリックインターフェイスを改善する必要があるという信号です。
C++:あなたの私のメンバーにあなたのプライベートメンバーへのアクセス権があります... – Mehrdad
私は同じことをしますが、ロジックgetXがBのインスタンスに関係しないので、静的int getXを好きです。 **:これを行うには、最初は悪いデザインのように思える。 – Assambar
@Assambar:そうですね、それはとてもきれいです。 – Erik