0

我必须承认我很难提出这个问题,但我会尽力做到准确。我试图寻找我的问题的答案,但我怀疑我无法找到我正在寻找的东西,因为我不知道该怎么称呼它。

我有一个基类 A,以及从这个基类继承的几个子类。然后我创建另一个类 X,它继承自一些提到的子类。我现在面临的问题是 X 继承的每个类都有自己的 A 类实例。下面的代码应该可以更好地理解我的意思。

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

class X : public B, public C;

当 B 类和 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 回答