遇到虚函数问题(C ++)

时间:2014-04-10 04:14:28

标签: c++ virtual-functions

所以我做了这个简单的程序:

#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,它的数量巨大。所以我想知道的是为什么这个数字发生了很多,我该如何解决?

3 个答案:

答案 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()。由于您未初始化mn,因此它们具有垃圾值。

答案 2 :(得分:-1)

自从我编写任何C ++以来,已经有一段时间了,但这段代码是这样的:

void attack(){
    cout<<"monster  "<< attackPower<<endl;
}

还需要虚拟关键字:

virtual void attack(){
    cout<<"monster  "<< attackPower<<endl;
}