2013-04-05 152 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