2017-12-28 29 views
0

私はクラスWorldを持っています。クラスObjectのインスタンスのベクトルがあります。今、ベクトルのオブジェクトの1つへの参照を返す関数をWorldに作成しようとしています。main()では、値を直接配列に変更できます。クラス変数への参照を返す -

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&'を返すことができます。これは良い考えではありません。ベクタを変更すると、参照が無効になることがあります。なぜ、変更を行うコード(メイン)が '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) 

をしかしあなたがこれを行う前に、少なくとも一回以上だと思います。あなたのオブジェクトが純粋なコンテナ型でない限り、一般的に、あなたのインバリアントがそれを実現することなく侵害される可能性があるため、内部状態を乱す人はいません。

関連する問題