1

假设我有一个名为class AI. 在这个类中,我创建了另一个名为class AIbrain. 现在,我希望每个单独AI的对象都能够操作自己的AIbrain. 但是如果我class AIbrain{friend AI;};的类Aibrain将暴露给类的每个对象AI

所以我想知道有没有一种方法可以AIbrain让他们自己的AI对象成为朋友?否则,每个人AI都可以修改任何其他AI人的变量并访问他们的功能。

4

2 回答 2

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. 既然AIbrain是 的成员AI,就没有必要声明AI的朋友AIbrain。请注意,这在这里用作防止用户AIbrain直接实例化的技巧(私有构造函数仅可访问AI)。

于 2013-08-06T08:15:27.823 回答
2

您不修改类的变量和函数(除非它们是静态的),而是修改实例的变量和函数。
如果您只是希望每个AI都有一个 AIBrain,请给每个 AI 实例一个 AI 成员

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

然后每个 AI 实例都有自己的大脑,并且可以使用大脑的公共成员和功能。

于 2013-08-06T08:18:00.420 回答