可以分享间接基类的基类实例吗?

时间:2012-04-21 13:24:32

标签: c++ inheritance

我必须承认我在制定这个问题时遇到了麻烦,但我会尽力做到准确。我试图寻找我的问题的答案,但我怀疑我无法找到我正在寻找的东西,因为我不确定该怎么称呼它。

我有一个基类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的实例,那将是一个很好的解决方案。

这一切都可能吗?

1 个答案:

答案 0 :(得分:3)

您可以使用虚拟继承来解决此问题:

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

class X : virtual public B, virtual public C;

有关the diamond problem的更多信息,请参阅