Wes*_*ton 4 c++ reference class object
假设我有一个看起来像这样的课程
class MyAnimals{
public:
Animal getAnimal(int index){
return animals.at(index);
}
private:
vector<Animal> animals;
}
Run Code Online (Sandbox Code Playgroud)
从我到目前为止学到的关于C++的知识,我认为getAnimal
目前会返回动物的副本,而不是Java中的引用.我已经看到这被建议作为返回对象的正确方法,但是如果你想要在它返回后修改那个动物怎么办?我只是改变它的副本,MyAnimals.animals里面的实际动物将保持不变.我已经看到解决这个问题的一种方法是返回Animal&
而不是Animal
,这似乎在很大程度上起作用,但是如果我想重新分配给返回的Animal的变量怎么办?例如,
Animal& a = myanimals.getAnimal(1);
a = myanimals.getAnimal(2);
Run Code Online (Sandbox Code Playgroud)
从我得到的,这将改变动物myanimals.animals[1]
是同一个确切的对象myanimals.animals[2]
,因为a是一个参考.返回物品有哪些不同的方法?
从我到目前为止学到的关于C++的知识来看,我认为getAnimal目前会返回动物的副本,而不是Java中的引用.
正确.
我已经看到这被建议作为返回对象的正确方法
如果您打算返回副本,那么是.
我只是改变它的副本,MyAnimals.animals里面的实际动物将保持不变.
正确.
我看到解决这个问题的一种方法是返回Animal而不是Animal,这似乎在很大程度上起作用
是的,引用正是您所需要的.
但是如果我想重新分配给返回的Animal的变量怎么办?
好吧,通常不需要重新分配现有的引用(无论如何都不允许).而不是你做了什么,你可以这样做:
Animal& a = myanimals.getAnimal(1);
Animal& b = myanimals.getAnimal(2);
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因需要,则使用指针代替,以绕过限制.即使您返回引用,也可以执行此操作:
Animal* a = &myanimals.getAnimal(1);
a = &myanimals.getAnimal(2);
Run Code Online (Sandbox Code Playgroud)