首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >内部类可以访问私有变量吗?

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

Stack Overflow用户
提问于 2009-01-28 01:15:07
回答 3查看 113.4K关注 0票数 134
代码语言:javascript
复制
class Outer {

    class Inner {
    public:
        Inner() {}
        void func() ;
    };

private:
    static const char* const MYCONST;
    int var;
};

void Outer::Inner::func() {
    var = 1;
}

const char* const Outer::MYCONST = "myconst";

当我使用外部::内部类进行编译时,没有名为“`var”的成员时会出现此错误。

EN

回答 3

Stack Overflow用户

发布于 2009-01-28 01:33:03

内部类是定义它的类的朋友。

所以,可以;类型为Outer::Inner的对象可以访问类型为Outer的对象的成员变量var

与Java不同的是,Outer::Inner类型的对象和父类的对象之间没有相关性。您必须手动创建父子关系。

代码语言:javascript
复制
#include <string>
#include <iostream>

class Outer
{
    class Inner
    {
        public:
            Inner(Outer& x): parent(x) {}
            void func()
            {
                std::string a = "myconst1";
                std::cout << parent.var << std::endl;

                if (a == 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();
}
票数 142
EN

Stack Overflow用户

发布于 2009-01-28 01:34:13

内部类可以访问外部类的所有成员,但它没有对父类实例的隐式引用(与Java的一些奇怪之处不同)。因此,如果将对外部类的引用传递给内部类,则它可以引用外部类实例中的任何内容。

票数 35
EN

Stack Overflow用户

发布于 2012-02-20 23:08:11

var不是内部类的成员。

要访问var,应该使用指向外部类实例的指针或引用。例如,如果内部类是外部类的朋友,则pOuter->var将起作用,或者,如果严格遵循C++标准,则var是公共的。

一些编译器将内部类视为外部类的朋友,但有些则可能不是。请参阅this document for IBM compiler

“在另一个类的作用域中声明嵌套类。嵌套类的名称是其封闭类的局部名称。除非您使用显式指针、引用或对象名,否则嵌套类中的声明只能使用可见的结构,包括类型名称、静态成员、封闭类的枚举器和全局变量。

嵌套类的成员函数遵循常规访问规则,并且对其封闭类的成员没有特殊访问权限。封闭类的成员函数对嵌套类的成员没有特殊访问权限。“

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/486099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档