我必须承认我在制定这个问题时遇到了麻烦,但我会尽力做到准确。我试图寻找我的问题的答案,但我怀疑我无法找到我正在寻找的东西,因为我不确定该怎么称呼它。
我有一个基类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的实例,那将是一个很好的解决方案。
这一切都可能吗?
答案 0 :(得分:3)
您可以使用虚拟继承来解决此问题:
class B : virtual public A;
class C : virtual public A;
class X : virtual public B, virtual public C;
有关the diamond problem的更多信息,请参阅