请问一个关于抽象类的有关问题

请教一个关于抽象类的问题
我想做一个简易的RPG小游戏,有要求需要用到抽象类,需要有攻击、防御、致命一击这样的功能,所以我将抽象类定义成如下:

class Role
{
public:
    virtual int attack() = 0;
    virtual int defend() = 0;
    virtual int hit() = 0;
}

接下来要继承该类,我想写成下面这样的:

class Player : public Role
{
public:
    Player();
    Player(string name, char hp, char att, char def, char lv) : strName(name), chHP(hp), chAttack(att), chDefence(def), chLevel(lv) {}
    int attack(Player);
    int defend(Player);
    int hit(Player);
    int getHP();
    int setModifyHP(int);
private:
    string strName;
    char chHP;
    char chAttack;
    char chDefence;
    char chLevel;
};

但是这样编译器会报错,提示Player是抽象类。难道必须要在函数写一个int attack()这样的,然后再写个重载的函数int attack(Player)这样子吗?能不能在参数列表里面加一个可以强制转换成任何类的那样?就类似Java中的Object类?
C++两年前学的,当时通看了C++ Primer,现在都忘了……所以如果大家觉得这个问题小儿科,大家不要吐槽……
------解决方案--------------------
不吐槽啊 问题很好!

个人认为你在base class里面应该这样写


class Role
{
public:
    virtual int attack(Role&) = 0;
    virtual int defend(Role&) = 0;
    virtual int hit(Role&) = 0;
}