[英]Having trouble with virtual functions(C++)
So I made this simple program: 所以我做了一个简单的程序:
#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;
}
And the problem I'm having is that when I print out the attack power for like enemy1 it's not what I set it to, 29, its some huge number. 我遇到的问题是,当我像敌人1那样打印出攻击力时,它不是我设定的值29,而是很大的数字。 So what I'm wondering is why is that number huge number occurring and how can I fix it?
因此,我想知道的是为什么会出现这个巨大的数字,我该如何解决呢?
Initialise attackpower first by 首先通过以下方式初始化攻击力
enemy1->setAttackPower(29); enemy2->setAttackPower(99);
Then print them, 然后打印
enemy1->attack(); enemy2->attack();
The main
would be like 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;
}
You called attack()
before setAttackPower()
. 你所谓的
attack()
之前setAttackPower()
Because you did not initialize either m
or n
, they have garbage values. 因为您没有初始化
m
或n
,所以它们具有垃圾值。
It's been a quite a while since I wrote any C++ but does this code: 自从我编写任何C ++以来已经有一段时间了,但是执行以下代码:
void attack(){
cout<<"monster "<< attackPower<<endl;
}
also need to the virtual keyword: 还需要虚拟关键字:
virtual void attack(){
cout<<"monster "<< attackPower<<endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.