假設我有一個叫做class AI
的類。在這堂課裏面,我創建了另一個名爲class AIbrain
的孩子班級。現在,我希望每個單獨的AI
對象能夠自己操作AIbrain
。但如果我class AIbrain{friend AI;};
類Aibrain
將暴露給類AI
的每個對象。C++:朋友特定對象(嵌套類)
所以我想知道有AIbrain
朋友自己的AI
對象的方式嗎?否則每個AI
將能夠修改任何其他AI
的變量並訪問它們的功能。
假設我有一個叫做class AI
的類。在這堂課裏面,我創建了另一個名爲class AIbrain
的孩子班級。現在,我希望每個單獨的AI
對象能夠自己操作AIbrain
。但如果我class AIbrain{friend AI;};
類Aibrain
將暴露給類AI
的每個對象。C++:朋友特定對象(嵌套類)
所以我想知道有AIbrain
朋友自己的AI
對象的方式嗎?否則每個AI
將能夠修改任何其他AI
的變量並訪問它們的功能。
我希望我理解正確你:
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
父實例的私有成員,你仍然需要聲明AIbrain
爲AI
朋友。由於AIbrain
是AI
的成員,因此沒有必要聲明AI
AIbrain
的朋友。請注意,這裏使用這個方法是爲了防止用戶直接實例化AIbrain
(私有構造函數僅可用於AI
)。
您不會修改某個類的變量和函數(除非它們是靜態的),您可以修改這些實例的變量和函數。
如果你簡單的希望每個AI
到有AIBrain
,給每個AI實例的AI成員
class AIBrain { /*...*/ };
class AI {
public:
//whatever
private:
AIBrain brain;
};
每個AI實例,然後有自己的大腦,可以用腦的公共部件及功能。