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 のインスタンスを共有していれば、良い解決策になると思います。

これはまったく可能ですか?

4

1 に答える 1

3

これは、仮想継承を使用して解決できます。

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

class X : virtual public B, virtual public C;

ダイヤモンド問題の詳細を参照してください。

于 2012-04-21T13:26:58.727 に答える