2013-04-05 3 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 클래스 멤버에 액세스 할 수 없습니까? 외부 클래스 객체는 public 멤버 접근 권한이 모두 class Outer이어야합니다. 그리고 Outer 클래스에 포함 된 Inner 클래스 객체를 만들 때 어떻게 동작합니까?외부 클래스 객체를 사용하여 내부 클래스 멤버에 액세스 할 수 없습니다.

답변

5

Inner은 다른 범위에서 정의 된 클래스입니다. 그것은

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

istatic하지 않기 때문에 분명히 할 수 없습니다 다음

Inner::i =50 

말 다르지 없습니다.

내부 클래스를 선언해도 해당 구문을 사용하여 액세스 할 수있는 외부 클래스에 대해 해당 유형의 멤버가 자동으로 선언되지 않습니다.

이제 무엇인가 :

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

그러면 Outer 클래스 객체가 내부 클래스 'i' 값을 갖는 방법은 무엇입니까? Inner 클래스의 객체를'obj1-> Inner objInner;로 만들 필요가 있는가? objInner.i = 50; ' –

+0

@SoumyajitRoy 귀하의 코드에서와 같이, Outer 클래스에는 Inner 유형의 멤버가 없습니다. 저것을하는 방법에 관해서는 잘게 잘린 것을 보아라. –

+0

예 코드 스 니펫이 완벽하게 작동합니다. 내 이해를 명확히하기 위해 Inner 클래스는 다른 일반 멤버와 마찬가지로 Outer 클래스의 멤버가 아닙니다. 권리? 실제로 Inner 클래스 정의는 'innerMember'유형으로 작동합니다. 내가 맞습니까? 'int innerMember'와 동일 –

관련 문제