2012-04-21 28 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