嵌套内部 class 访问外部 class
Nested inner class access to outer class
- 我有一个 嵌套 class 需要 操作其外部 class 的数据成员。
- 我要求外部 class 不会 有一个空的构造函数。
- 以下版本编译正常
- 有没有办法避免在
Inner
里面使用Outer *o
,而使用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;
}
如果我们假设:
- classA有一个成员变量
class B b;
- class B有一个成员变量
class A a;
那么A
和B
的大小是无穷大的
不行,如果你创建一个新的实例,情况就会变成循环。除了使用指向外部 class 的指针,您还可以使用引用,如下所示:
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;
}
- 我有一个 嵌套 class 需要 操作其外部 class 的数据成员。
- 我要求外部 class 不会 有一个空的构造函数。
- 以下版本编译正常
- 有没有办法避免在
Inner
里面使用Outer *o
,而使用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;
}
如果我们假设:
- classA有一个成员变量
class B b;
- class B有一个成员变量
class A a;
那么A
和B
的大小是无穷大的
不行,如果你创建一个新的实例,情况就会变成循环。除了使用指向外部 class 的指针,您还可以使用引用,如下所示:
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;
}