C ++:特定于朋友的对象(嵌套类)

时间:2013-08-06 08:03:34

标签: c++ class object friend nested-class

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

所以我想知道有AIbrain朋友加入他们自己的AI对象吗?或者,每个AI将能够修改任何其他AI的变量并访问其功能。

2 个答案:

答案 0 :(得分: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父实例的私有成员,您仍需要将AIbrain声明为AI的朋友。由于AIbrainAI的成员,因此无需声明AIAIbrain的朋友。请注意,这在此处用作防止用户直接实例化AIbrain的技巧(私有构造函数仅可用于AI)。

答案 1 :(得分:2)

您不修改类的变量和函数(除非它们是静态的)您修改实例的变量和函数。
如果您只想让每个AI 拥有 AIBrain,请为每个AI实例提供AI成员

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

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