首页 > 后端开发 > C++ > C 中的内部类可以访问其外部类的私有成员吗?

C 中的内部类可以访问其外部类的私有成员吗?

Patricia Arquette
发布: 2024-11-27 13:36:13
原创
422 人浏览过

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

内部类可以访问私有变量吗?

在此代码示例中,内部类 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板