2017-12-28 9 views
0

Also, ich habe eine Klasse World wo gibt es einen Vektor von Instanzen der Klasse Object. Jetzt versuche ich, eine Funktion in World zu erstellen, die einen Verweis auf eines der Objekte des Vektors zurückgibt, so dass Sie in main() Werte direkt in das Array ändern können. Es wäre etwas wie:Rückkehr Verweis auf Klassenvariable - 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; 
} 

Ist das möglich und legal in C++? Danke!

+1

Ja, natürlich. Gib einfach eine aktuelle Referenz zurück (hier ist ein Wert in deinem Code). – Quentin

+1

Ja, es ist legal. Aber Sie geben keine Referenz zurück. – DNK

+0

Die Funktion könnte natürlich ein 'Objekt & lt; zurückgeben, nicht, dass dies eine so gute Idee ist. Sobald Sie Änderungen am Vektor vornehmen, wird die Referenz möglicherweise ungültig. Warum kann der Code (in main), der Änderungen vornimmt, nicht Mitglied von "World" oder "Object" sein? –

Antwort

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

definieren Sie Ihre Funktion einen Verweis zurück (man beachte die &):

Object & functionThatReturnsReference (int index) 

ABER denken mindestens einmal, bevor Sie dies tun. Sofern Ihr Objekt kein reiner Containertyp ist, möchten Sie nicht, dass Menschen mit Ihrem internen Zustand herumhantieren, da Ihre Invarianten verletzt werden können, ohne dass der Benutzer dies bemerkt.

Verwandte Themen