2017-12-28 35 views
0

그래서 Object 클래스의 인스턴스 벡터가있는 World 클래스가 있습니다. 자, 벡터의 객체 중 하나에 대한 참조를 반환하는 World에 함수를 만들려고합니다. 따라서 main()에서 값을 배열로 직접 변경할 수 있습니다. 다음과 같은 형식이 될 수 있습니다 :클래스 변수에 대한 참조 반환 - C++

class Object{ 
    //things 
} 

class World{ 
    private: 
    vector <Object> ObjectsInWorld; 

    public: 
    Object functionThatReturnsReference(int index){ 
     //somehow return reference to ObjectsInWorld[index]; 
    } 
} 


int main(){ 
    World world; 
    Object& obj = world.functionThatReturnsReference(2); 
    //now changes made to obj should apply also to world's ObjectsInWorld[2] 

    return 0; 
} 

C++에서는 가능하고 합법적입니까? 감사합니다.

+1

예, 물론입니다. 그냥 실제 참조를 반환합니다 (여기에 코드의 값입니다). – Quentin

+1

예, 유효합니다. 그러나 당신은 참조를 반환하지 않습니다. – DNK

+0

물론이 함수는 합법적으로'Object &'를 반환 할 수 있습니다. 이것은 좋은 생각이 아닙니다. 벡터를 변경하면 참조가 무효화 될 수 있습니다. 왜 변경을하는 코드 (main에서)가'World' 또는'Object'의 멤버가 될 수 없습니까? –

답변

0
Object& World::functionThatReturnsReference(int index) 
{ 
    /// throws an exception if index is out-of-range 
    return ObjectsInWorld.at(index); 
} 
2

은 그냥 참조 (유의 &)을 반환하는 함수를 정의

Object & functionThatReturnsReference (int index) 

하지만이 작업을 수행 적어도 한 번 더 전에 생각합니다. 객체가 순수한 컨테이너 유형이 아니라면 일반적으로 사용자가 내부 상태를 혼란스럽게하는 것을 원하지 않습니다. 사용자가이를 깨닫지 못하면 불변식이가 침해받을 수 있습니다.