私有枚举与公共重载的构造函数

时间:2016-02-28 03:35:25

标签: c++ oop enums private

我遇到问题让我的重载构造函数工作。继续得到一个问题,说只有一个复制构造函数和析构函数。我应该使用私有枚举技术,因此使用成员函数,如setWeaponSword()(最后四个函数)。

这是我的班级声明:

class Knight{

public:
    enum Race{ ALTMER, IMPERIAL, KHAJIIT };
    Knight(Race newRace, short int newHealth, short int newStamina, Weapon newWeapon);
    Knight(const Knight &copiedKnight);
    ~Knight();
    void setRace(const Race newRace);
    Race getRace();
    void setHealth(const short int newHealth);
    short int getHealth();
    void setStamina(const short int newStamina);
    short int getStamina();
    void setWeaponBow();
    bool isWeaponBow();
    void setWeaponSword();
    bool isWeaponSword();
private:
    enum Weapon { BOW , SWORD};
    Race race;
    short int health;
    short int stamina;
    Weapon weapon;
};

以下是它的简单成员函数文件:

//Defualt values for variables Needed


 Knight::Knight(Race newRace, short int newHealth, short int newStamina, Weapon newWeapon) : newRace(IMPERIAL), newHealth(50), newStamina(35), newWeapon(SWORD)
{
    setRace(newRace);
    setHealth(newHealth);
    setStamina(newStamina);
}

我的思维过程是。如果我无法找到,我无法通过主Weapon。这就是为什么我认为我必须使用我班级中的最后四个函数来操纵数据来获取它。我不知道怎么做。请让我知道一些基础知识。

1 个答案:

答案 0 :(得分:1)

我建议这样做:

private:
    enum Weapon { NO_WEAPON, BOW , SWORD};
    Race race;
    short int health;
    short int stamina;
    Weapon weapon{NO_WEAPON};

然后,您不需要将武器传递给构造函数。在你有一个类之前,该类将默认为NO_WEAPON。

考虑删除其他参数并将其替换为默认值。采用一堆int的构造函数可能容易出错。

编辑:如果您使用的是较旧的编译器,则无法将{NO_WEAPON}放入类中。相反,您必须在构造函数中初始化它:

     Knight::Knight(........) : weapon(NO_WEAPON)
     { ...