2015-10-21 2 views
1

Так что мой код вроде этогокак вызвать переменную из вложенного класса в C++

class foo1 
{ 
    public: 
     foo1() 
     { 
      a = "text"; 
     } 

     void getString() 
     { 
      return a; 
     } 
    private: 
     string a; 
}; 

class foo2 
{ 
    public: 
     foo2() 
     { 
      foo3 boo3; 
     } 
     class foo3 
     { 
      public: 
       foo3() 
       { 
        foo1 boo1; 
       } 
      private: 
       foo1 boo1; 
     }; 
    private: 
}; 

int main() 
{ 
    foo2 object; 
    cout << /* ??? */ ; 
} 

Во-первых, есть ли какие-либо проблемы со структурой кода в классах, во-вторых, что я должен положить в место комментария для отображения строки a в объекте foo2 i, инициализированном в int main()?

+1

Посмотрите на это: HTTP: //en.cppreference.com/w/cpp/language/nested_types – Bathsheba

+2

Не рекомендуется переводить переменные 'boo1' –

ответ

6

Есть несколько вопросов, с кодом, я объясню им код комментарии

class foo1 
{ 
    public: 
     //use initializer lists to avoid extra copying 
     foo1() : a("text") 
     { 
     } 

     //change return type from void to a const reference to string 
     const string & getString() 
     { 
      return a; 
     } 
    private: 
     string a; 
}; 

class foo2 
{ 
    public: 
     //use initializer lists to avoid extra copying 
     foo2() : boo3() 
     { 
     } 
     class foo3 
     { 
      public: 
       //use initializer lists to avoid extra copying 
       foo3() : boo1() 
       { 
       } 

       //you need a function that will allow access to the private member. Returning a const reference avoids extra copying 
       const foo1 & boo() 
       { 
        return boo1; 
       } 

      private: 
       foo1 boo1; 
     }; 

     //you need a function that will allow access to the private member 
     const foo3 & foo() 
     { 
      return boo3; 
     } 
    //you need to save the foo3 object in the class to be able to use it later 
    private: 
     foo3 boo3; 
}; 

int main() 
{ 
    foo2 object; 
    cout << object.foo().boo().getString(); 
} 

Теперь это, как вы получить доступ к строке:

cout << object.foo().boo().getString(); 
      \__________/ \___/ \_________/ 
       ^  ^  ^---- get the string from the foo1 object 
       |   |---- get the foo1 object from the foo3 object 
       |---- get the foo3 object stored in "object" 

 Смежные вопросы

  • Нет связанных вопросов^_^