所以我做了这个简单的程序:
#include <iostream>
using namespace std;
class Enemy{
public:
virtual void attack(){}
int attackPower;
void setAttackPower(int a)
{
attackPower = a;
}
};
class Ninja: public Enemy{
public:
void attack(){
cout<<"ninja "<< attackPower<<endl;
}
};
class Monster: public Enemy{
public:
void attack(){
cout<<"monster "<< attackPower<<endl;
}
};
int main()
{
Ninja n;
Monster m;
Enemy *enemy1= &n;
Enemy *enemy2 = &m;
enemy1->attack();
enemy2->attack();
enemy1->setAttackPower(29);
enemy2->setAttackPower(99);
return 0;
}
我遇到的问题是,当我打印出类似敌人的攻击力时,它并不是我设置的,29,它的数量巨大。所以我想知道的是为什么这个数字发生了很多,我该如何解决?
答案 0 :(得分:0)
首先通过
初始化攻击力 enemy1->setAttackPower(29);
enemy2->setAttackPower(99);
然后打印出来,
enemy1->attack();
enemy2->attack();
main
就像
int main()
{
Ninja n;
Monster m;
Enemy *enemy1= &n;
Enemy *enemy2 = &m;
enemy1->setAttackPower(29); // set the attack power first
enemy2->setAttackPower(99);
enemy1->attack(); // then print it otherwise junk values will be printed
enemy2->attack();
return 0;
}
答案 1 :(得分:0)
您在attack()
之前致电setAttackPower()
。由于您未初始化m
或n
,因此它们具有垃圾值。
答案 2 :(得分:-1)
自从我编写任何C ++以来,已经有一段时间了,但这段代码是这样的:
void attack(){
cout<<"monster "<< attackPower<<endl;
}
还需要虚拟关键字:
virtual void attack(){
cout<<"monster "<< attackPower<<endl;
}