2012-04-21 67 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.共享一个实例

这是可能吗?

回答

3

您可以通过使用虚拟继承解决这个问题:

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

class X : virtual public B, virtual public C; 

查看更多关于the diamond problem

+0

解决了它,非常感谢! – skakri 2012-04-21 13:34:01

+0

@ user1348317很高兴听到!如果你认为答案合适,那么你可以“接受”它。 – juanchopanza 2012-04-21 13:36:30

+0

完成,并再次感谢。 – skakri 2012-04-21 13:40:58