首页 >后端开发 >C++ >C 中的内部类如何访问其封闭类的私有成员?

C 中的内部类如何访问其封闭类的私有成员?

Patricia Arquette
Patricia Arquette原创
2024-12-08 06:51:14240浏览

How Can Inner Classes in C   Access Private Members of Their Enclosing Class?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn