在使用虚拟函数(C++)时遇到问题

Having trouble with virtual functions(C++)

本文关键字:遇到 问题 C++ 虚拟 函数      更新时间:2023-10-16

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

#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;
}

我遇到的问题是,当我打印出类似enemy1的攻击力时,它并不是我设定的,29,这是一个巨大的数字。所以我想知道的是,为什么这个数字会出现巨大的数字,我该如何解决?

首先通过初始化附加电源

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;
}

您在setAttackPower()之前调用了attack()。因为没有初始化mn,所以它们具有垃圾值。

我已经很久没有写任何C++了,但我做了以下代码:

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

还需要虚拟关键字:

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