【发布时间】:2021-01-19 18:24:39
【问题描述】:
我有一个类“房间”,它有一个类型为“英雄”的变量。我面临的问题是,每当我调用类型为 RoomObject.GetHeroObject().MethodOfHero() 的方法时,都会创建一个新的 Hero 对象。更奇怪的是 RoomObject.GetHeroObject() 总是返回同一个类型为“Hero”的对象,然而 MethodOfHero() 每次都以某种方式引用不同的对象。
class Hero; //Forward declaration
class Room {
protected:
Hero *hero;
...
}
Hero Room::getHero(){return *hero;};
void Hero::move(char c) {
if(c==KEY_UP){
cout<<"up";
moveUp();
}
else if(c==KEY_DOWN){
moveDown();
cout<<"down";
}
else if(c==KEY_LEFT){
moveLeft();
cout<<"left";
}
else if(c==KEY_RIGHT){
moveRight();
cout<<"right";
}
else {
cout<<"Incorrect input";
return;
}
}
int main() {
Room unfurnished1= Room(5, 15);
unfurnished1.getHero().move('w');
【问题讨论】:
-
Hero Room::getHero(){return *hero;};创建Hero实例的副本。您的意思是返回参考吗?如果是这样,返回类型应该是Hero&。 -
如果您执行
int Room::getHero() { return 3; },您会期望a.getHero()++;以某种方式导致对getHero()的下一次调用返回4? -
我确实想返回一个引用而不是创建一个 Hero 实例的副本。您能否详细说明我如何实现这一目标?谢谢!