2012-04-25 11 views

答えて

1

厳密には継承ではありません。 AとBはCの親であるが、AとBは関係がなく、互いにアクセスすることはできない。

それは、クラスAは、Cはこのように、Bに関数を呼び出す実装仮想メソッド持ち、継承とpolimorphismを通して可能です:

class A { 
public: 
    b get_b() { return do_get_b(); } 
private: 
    virtual do_get_b() = 0; 
}; 

class B { 
public: 
    b some_b; 
}; 

class C : public A, public B { 
private: 
    virtual do_get_b() {return some_b;} 
} 
+0

あなたの素晴らしいansをありがとう。しかし、わかりませんでした。クラスBの中では "b some_b"とはどういう意味ですか?クラスAの中のY "b get_b()"が実装されています。 – Sijith

+0

b some_bは、b型の「some_b」という名前のメンバ変数です。 – daramarak

0

時には可能です。 An example how to achieve this.

その例は、もう少しあなたより複雑であるダイヤモンドの階層に適用されます。あなたの条件では、ClassAとClassBはBaseクラスから派生し、ClassCはClassAとClassBから派生します。

+0

ここではクラスAとクラスBに継承されたベースカルスはありません。この場合、クラスAからクラスBの楽しみにアクセスすることが可能です – Sijith

+0

ベースクラスを追加することをお勧めします – Andrey

0

あなたはAのあなたの対象かどうかを確認するためのdynamic_castに確認してくださいでした本当にCのオブジェクトであり、それによってB

void A::foo() 
{ 
    B* pB = dynamic_cast<B*>(this); 
    if (pB) pB->bar(); 
} 

のしかし、AとBは、互いに本当に独立している場合には、別の解決策を見つけるために、おそらくより良いです。