内部类可以访问私有变量吗?
在此代码示例中,内部类 Inner 是在外部类 Outer 中定义的。当创建 Inner 的实例时,它应该能够访问 Outer 类的私有成员变量 var。但是编译时出现错误,提示 Inner 没有名为 var 的成员。
内部类和成员访问
C 中的内部类被认为是友元其外部类。作为友元,内部类可以访问外部类的所有成员,包括私有成员。因此,Inner 的实例应该能够访问 Outer 的私有变量 var。
问题与解决方案
错误源于之间缺乏联系内部实例和外部实例。在Java中,内部类与其封闭类之间存在隐含的父子关系。但是,在 C 中,必须显式定义这种关系。
要解决此问题,必须将对外部类的引用传递给内部类的构造函数。这为内部类提供了访问外部类成员所需的上下文。
下面是一个示例,演示如何建立父子连接并允许 Inner 访问 Outer 的私有变量 var:
#include <string> #include <iostream> class Outer { public: class Inner { public: Inner(Outer& x): parent(x) {} // Pass a reference to the outer class void func() { std::string a = "myconst1"; std::cout << parent.var << std::endl; if (a == Outer::MYCONST) std::cout << "string same" << std::endl; else std::cout << "string not same" << std::endl; } private: Outer& parent; }; public: Outer(): i(*this), var(4) {} Outer(Outer& other): i(other), var(22) {} void func() { i.func(); } private: static const char* const MYCONST; Inner i; int var; }; const char* const Outer::MYCONST = "myconst"; int main() { Outer o1; Outer o2(o1); o1.func(); o2.func(); return 0; }
修改后的代码允许 Inner 访问 var,因为 Inner 的构造函数在 Inner 和创建的 Outer 实例之间建立了父子关系它。
以上是C 中的内部类可以访问其外部类的私有成员吗?的详细内容。更多信息请关注PHP中文网其他相关文章!