2012-04-21 9 views
0

私はこの質問を定式化するのに問題があることを認めなければなりませんが、正確になるように努力します。私は自分の質問に対する答えを検索しようとしましたが、私は何を探しているのかわからないのです。間接ベースクラスの基本クラスのインスタンスを共有できますか?

私は基本クラスAと、この基本クラスを継承するいくつかの子クラスを持っています。私は次に、言及された子クラスのいくつかを継承する別のクラスXを作成します。私が今直面している問題は、クラスXのそれぞれが継承しているクラスAの独自のインスタンスがあることです。以下のコードは、私が意味することをよりよく理解するはずです。

class A; 
class B : public A; 
class C : public A; 

class X : public B, public C; 

彼らは両方とも同じクラスのための間接的な基底クラスとして動作しているとき、クラスBとCは、クラスAの同じインスタンスを共有する方法はありますか?

私がこれを望む理由の例を挙げると、このコードを見てみましょう。

class A 
    { 
     int _x; 
    }; 

    class B : public A 
    { 
     void outputX(){std::cout << A::_x << std::endl; 
    }; 

    class C : public A 
    { 
     void setX(int x){A::_x=x;} 
    }; 

    class X : public B, public C 
    { 
     C::setX(5); 

     // this will output an un-initialized _x, 
     // as B and C have their own version of A 
     B::outputX() 
    }; 

今、私は、これはここに、この例ではなく、不必要なようだ実現が、私の実際の状況に私はBとCは、クラスXに

をAのインスタンスを共有している場合、それは良い解決策だと思うのが好きこれはすべて可能ですか?

答えて

3

あなたは、仮想継承を使用することによってこの問題を解決することができます

class B : virtual public A; 
class C : virtual public A; 

class X : virtual public B, virtual public C; 

the diamond problemの詳細を参照してください。

+0

解決済み、ありがとうございました! – skakri

+0

@ user1348317これを聞いてうれしい!あなたがその答えを適切と考えるなら、それを "受け入れる"ことができます。 – juanchopanza

+0

完了し、もう一度感謝します。 – skakri

関連する問題