C++嵌套类中this关键字是否指代所有上层类的技术问询
嵌套类成员函数中this能否访问外层类成员?
咱先直接给结论:你写的这段代码根本过不了编译,核心原因就是你对嵌套类里this的理解有误。
先把你的代码摆出来方便分析:
原类定义
class foo { public: class bar { public: int barMethod() const; protected: int barVar; }; protected: int fooVar; };
你尝试的实现
int foo::bar::barMethod() const { return this->fooVar + this->barVar; }
为什么不行?关键在这几点:
- 嵌套类
foo::bar和外层类foo是完全独立的两个类,bar并不会自动和某个foo的实例绑定在一起。 barMethod()里的this,指代的仅仅是当前调用这个方法的bar类实例,它只包含bar自己的成员(比如barVar),根本不知道外层foo的存在,所以this->fooVar属于“访问不存在的成员”,编译器直接报错。- 哪怕
fooVar改成public权限也没用,因为你没有一个具体的foo对象可以访问——bar的实例不会天生附带一个foo的实例。
那如果就是想让bar访问foo的成员怎么办?得手动给bar加一个外层foo的引用/指针,比如修改类定义:
class foo { public: class bar { public: // 构造时传入外层foo的引用 bar(foo& outer_instance) : outer_(outer_instance) {} int barMethod() const; protected: int barVar; foo& outer_; // 持有外层foo实例的引用 }; protected: int fooVar; };
然后实现barMethod()就合法了:
int foo::bar::barMethod() const { // 通过持有的outer_引用访问foo的成员 return outer_.fooVar + this->barVar; }
总结一下:嵌套类的this只属于它自己,和上层类没有半毛钱关系,上层类的成员必须通过具体的对象实例才能访问。
内容的提问来源于stack exchange,提问作者Benjamin Barrois
相关产品推荐
相关产品推荐

