假设我有一个名为class AI
. 在这个类中,我创建了另一个名为class AIbrain
. 现在,我希望每个单独AI
的对象都能够操作自己的AIbrain
. 但是如果我class AIbrain{friend AI;};
的类Aibrain
将暴露给类的每个对象AI
。
所以我想知道有没有一种方法可以AIbrain
让他们自己的AI
对象成为朋友?否则,每个人AI
都可以修改任何其他AI
人的变量并访问他们的功能。
假设我有一个名为class AI
. 在这个类中,我创建了另一个名为class AIbrain
. 现在,我希望每个单独AI
的对象都能够操作自己的AIbrain
. 但是如果我class AIbrain{friend AI;};
的类Aibrain
将暴露给类的每个对象AI
。
所以我想知道有没有一种方法可以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 实例都有自己的大脑,并且可以使用大脑的公共成员和功能。