2013-04-05 123 views
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! 
} 

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

回答

5

Inner只是在不同范围定义的类。那比说

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

然后

Inner::i =50 

这显然是不可能的,因为i不是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! 
} 

会工作。

+0

好的。那么外部类对象如何拥有自己的内部类“我”的价值?我是否需要为Inner类创建对象:obj1-> Inner objInner; objInner.i = 50;' – 2013-04-05 20:51:41

+0

@SoumyajitRoy作为你的代码,Outer类没有Inner类型的成员。看到我的剪辑如何做到这一点。 – 2013-04-05 20:55:04

+0

是的你的代码片段完美的作品。为了澄清我对Inner类的理解,那么不像其他普通成员那样是Outer类的成员。对?实际上,Inner类定义是作为'innerMember'的一种类型工作的。我对吗?与'int innerMember'一样 – 2013-04-05 21:00:43