假设我有一个名为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 实例都有自己的大脑,并且可以使用大脑的公共成员和功能。