2011-06-22 38 views
-1

我有以下情況:如何在同一結構中調用一個對象的方法,從另一個對象

class B 
{ 
    public: 
     void methodInB(); 
}; 

class C 
{ 
    public: 
     void methodInC(); 
}; 

class A 
{ 
    public: 
     void methodInA(); 
    private: 
     B objB; 
     C objC; 
}; 

void A::methodInA() 
{ 
    objB.methodInB(); 
} 

int main() 
{ 
    A objA; 
    objA.methodInA(); 
    return 0; 
} 

我希望能夠調用從B::methodInB()C::methodInC(),但我不知道是什麼這種方式將是(不是沒有搞亂全局)。

我的第一個想法是添加一個C* pC指針作爲B的成員,然後從methodInB()稱它爲pC->methodInC。這需要我在使用該方法之前從A內設置指針(可能在A的構造函數中)。我的問題是如果我添加一個DE對象,我可能需要調用B中的其他對象,而我不想用指針填充類定義。

有沒有其他方式做到這一點?對該對象所屬對象的隱式引用?有點像this但父母?所以我至少可以做parent->objC->methodInC()

+0

你'objB'和「objC」不知道對方。沒有一般的「知道你屬於誰」這樣的事情。如果你想要的話,你可以用''''this'指針構造'objB'和'objC',但是你必須明確地告訴它們它們被包含,或者在哪裏找到兄弟。 –

+0

沒想到有。不過,這就是爲什麼我問。我知道兄弟姐妹不知道彼此,所以我如何從另一個人打電話給他人? – Kian

+0

您可以使用對其他對象的引用構建每個引用,或者兩者都引用父對象。或者,您可以重新設計並使'A' *從'B'和'C'繼承*。 –

回答

4

我認爲最乾淨的方法是「注入依賴」,也就是通過objCmethodInB,那麼這將在該對象上調用methodInC

void A::methodInA() 
{ 
    objB.methodInB(objC); 
} 

// ... 

void B::methodInB(C &objC) 
{ 
    objC.methodInC(); 
} 
2

讓每個類B,C,D,E等都有一個指向它們是子對象的A對象的指針。

class A; 
class C; 
class B 
{ 
    A* pA; 
    void MethodB(); 
}; 


... 

void B::MethodB 
{ 
    (pa->CObject).MethodC(); 
}  
相關問題