0
#include <iostream>

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    };
};

int main(int argc, char **argv) {
    Outer::Inner obj;
    obj.i=20;
    std::cout<<"Inner i = "<<obj.i<<std::endl;

    Outer *obj1=new Outer;
    obj1->setOuter(40);
    std::cout<<"Outer o = "<<obj.retOuter(obj1)<<std::endl;

    obj1->Inner::i =50; //Access the inner class members by Outer class object!
}

除了最后一行之外,上面代码中的所有内容都很好。为什么我无法使用外部类对象访问内部类成员?外部类对象应该具有的所有公共成员访问权限以及class Outer当我创建内部类对象时的行为如何,因为它包含在外部类中!

4

1 回答 1

5

Inner只是在不同范围内定义的类。跟说没区别

class Inner
{
public:
    int i;
    int retOuter(Outer *obj)
    {
        return obj->o;
    }
};

接着

Inner::i =50

这显然是不可能的,因为iis not static

声明内部类不会自动为外部类声明该类型的成员,您可以使用该语法访问该成员。

现在,类似:

class Outer
{
    int o;
public:
    void setOuter(int o)
    {
        this->o=o;
    }
    class Inner
    {
    public:
        int i;
        int retOuter(Outer *obj)
        {
            return obj->o;
        }
    } innerMember;
    //    ^^^
    // declare a member
};

int main(int argc, char **argv) {
    Outer *obj1=new Outer;
    obj1->innerMember.i =50; //Access the inner class members by Outer class object!
}

会工作。

于 2013-04-05T20:46:10.557 回答