在 C 中访问私有变量的内部类
在 C 中,内部类具有访问封闭类的私有成员的独特能力。考虑以下示例:
class Outer { class Inner { public: Inner() {} void func(); }; private: static const char* const MYCONST; int var; };
在此示例中,内部类是在外部类中定义的。根据传统的作用域规则,Outer 的 var 成员变量不应该被 Inner 访问。然而,在 C 中,内部类本质上是其封闭类的友元。
因此,Outer::Inner 类型的对象可以访问 Outer 的私有成员变量。不过需要注意的是,这种访问权限只能在内部类的范围内授予。
为了进一步说明这个概念,我们将内部类的 func() 方法修改如下:
void Outer::Inner::func() { var = 1; }
现在,如果我们尝试编译此代码,我们将遇到一条错误消息,指示“class Outer::Inner”没有名为“var”的成员。这是因为虽然内部类可以访问私有成员,但它们不会继承与封闭类的成员关系。
要在内部类中建立正确的成员关系,我们需要手动创建对封闭类,如下例所示:
class Outer { class Inner { public: Inner(Outer& x): parent(x) {} void func() { std::cout << parent.var << std::endl; } private: Outer& parent; }; public: Outer() : i(*this), var(4) {} void func() { i.func(); } private: Inner i; int var; }; int main() { Outer o; o.func(); }
在此示例中,内部类构造函数将对外部类的引用作为参数。这允许 Outer::Inner 类型的对象通过父引用访问 Outer 的私有成员。
以上是C 中的内部类如何访问其封闭类的私有成员?的详细内容。更多信息请关注PHP中文网其他相关文章!