2013-08-06 90 views
1

假設我有一個叫做class AI的類。在這堂課裏面,我創建了另一個名爲class AIbrain的孩子班級。現在,我希望每個單獨的AI對象能夠自己操作AIbrain。但如果我class AIbrain{friend AI;};Aibrain將暴露給類AI的每個對象。C++:朋友特定對象(嵌套類)

所以我想知道有AIbrain朋友自己的AI對象的方式嗎?否則每個AI將能夠修改任何其他AI的變量並訪問它們的功能。

回答

3

我希望我理解正確你:

class AI 
{ 
    class AIbrain 
    { 
    } brain; 
}; 

你想brain能夠訪問AI其父實例(代碼示例做出更加清晰你想要的方式來實現的)。

如果這是你可以通過解決這個情況:

class AI 
{ 
     class AIbrain 
     { 
       AI * parent_; 
       explicit AIbrain(AI * parent) : parent_(parent) {} 
     } brain; 

    public: 
     AI() : brain(this) {} 
}; 

如果brain需要訪問AI父實例的私有成員,你仍然需要聲明AIbrainAI朋友。由於AIbrainAI的成員,因此沒有必要聲明AIAIbrain的朋友。請注意,這裏使用這個方法是爲了防止用戶直接實例化AIbrain(私有構造函數僅可用於AI)。

2

您不會修改某個類的變量和函數(除非它們是靜態的),您可以修改這些實例的變量和函數。
如果你簡單的希望每個AIAIBrain,給每個AI實例的AI成員

class AIBrain { /*...*/ }; 
class AI { 
    public: 
    //whatever 
    private: 
    AIBrain brain; 
}; 

每個AI實例,然後有自己的大腦,可以用腦的公共部件及功能。