嵌套的内部类访问外部类

时间:2020-05-03 05:30:45

标签: c++ inner-classes default-constructor

  • 我有一个嵌套类,需要操作其外部类的数据成员
  • 我要求外部类具有空的构造函数。
  • 以下版本可以正常编译
  • 有什么方法可以避免在Outer *o中使用Inner并使用Outer o
class Outer {
private:
    class Inner {
    private: Outer *o;
    public:
        Inner(Outer *outer):o(outer){}
        void visit() { o->d=65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m):d(m),v(this){}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

否,如果您创建一个新实例,则情况将是周期性的。但是,您可以使用引用,而不是使用指向外部类的指针:

class Outer {
private:
    class Inner{
    private:
        Outer& o;
    public:
        Inner(Outer& outer) :o(outer) {}
        void visit() { o.d = 65; }
    };
private:
    int d;
    Inner v;
public:
    Outer(int m) :d(m), v(*this) {}
};

int main(int argc, char **argv)
{
    Outer out(16);
    return 0;
}

答案 1 :(得分:1)

如果我们假设:

  • A类具有成员变量class B b;
  • B类具有成员变量class A a;

然后AB的大小是无限的。