我正在尝试将对象传递给函数,但要传递的对象将取决于用户输入。我不知道该怎么做。
在 int main(){
我已经声明了四个子类类型的对象:
Human Kite(20, 100, "Kite"); Cyberdemon Ky(20, 100, "Ky Ky"); Balrogs Xor(20, 100, "HaXoR"); Elf Peet(20, 100, "Peet");
然后根据用户输入,我将四个对象之一传入 Creature 类型的对象,即父类。
int player_creature_switch;
Creature player1creature;
Creature player2creature;
cout << "Player 1 choose your class: (1) Human (2) Cyberdemon (3) Balrogs (4) Elf" << endl;
cin >> player_creature_switch;
switch(player_creature_switch){
case 1:
player1creature = Kite;
break;
case 2:
player1creature = Ky;
break;
case 3:
player1creature = Xor;
break;
case 4:
player1creature = Peet;
break;
default:
break;
}
cout << "Player 2 choose your class: (1) Human (2) Cyberdemon (3) Balrogs (4) Elf" << endl;
cin >> player_creature_switch;
switch(player_creature_switch){
case 1:
player2creature = Kite;
break;
case 2:
player2creature = Ky;
break;
case 3:
player2creature = Xor;
break;
case 4:
player2creature = Peet;
break;
default:
break;
}
execute_battle(player1creature, player2creature);
return 0;
}
然后我希望将持有四个子类对象中的任何一个的两个 Creature 对象传递给一个函数,execute_battle,它将访问作为参数传入的对象的成员函数。
void execute_battle(Creature& pl_creature, Creature& p2_creature){
cout << pl_creature.getType() << p1_creature.getName() << "has entered the fray!";
.... more code....
}
我的头文件和我的基/子类设置得很好。我知道这一点,因为如果我不将对象传递给函数,我的成员函数在 main 中工作正常。我也有我的函数协议等。我知道我没有正确传递对象或访问函数中的成员函数execute_battle
,因为目前我遇到了各种错误,例如In function execute_battle: p1_creature was not declared in this scope
. 我真的很困惑,因为我清楚地把它作为论据传递了。
我还尝试在函数中创建另一个 Creature 实例:
void execute_battle(Creature& pl_creature, Creature& p2_creature){
Creature p1_creat = p1_creature;
cout << pl_creat.getType() << p1_creat.getName() << "has entered the fray!";
}
但无济于事。我怎么能这样做? 更重要的是,有人可以根据正在传递的对象的引用/地址来解释发生了什么吗?
例如,我知道,当我在 switch 语句中将子对象的地址放入player1creature
父类型 Creature 中时,我不仅仅是将其所有内容放入player1creature
并覆盖player1creature
. 相反,我只是传递地址(希望如此?)所以它也保留了所有父函数。然后,我将父对象传递给函数execute_battle
,函数将创建该对象的本地副本(对)?这就是我认为正在发生的事情,但如果我有什么问题,我不会感到惊讶。
我也尝试在其他地方使用指针和引用,但事情很快就变得非常混乱。如果我能以某种方式提供更多代码,请告诉我。
谢谢!