C++具有子类特定值的非变化成员变量

jos*_*ark 3 c++ polymorphism

因此,我的类层次结构是:BaseClass(是一个抽象类)然后它有三个继承自它的子类:ArcaneWarrior,Guardian,Magi.

我想为DefaultHealth和DefaultMana提供两个特定于每个子类的非变化值,因为它们对于两个变量都具有不同的值.

我想我只是在寻找最好/最有效的方法来做到这一点.

我应该只在基类中有两个虚函数来返回DefaultHealth和DefaultMana,而在子类中我想要的值是硬代码吗?

我很欣赏任何见解

Xeo*_*Xeo 5

我的投票转到const基类和protected构造函数中的值:

class BaseClass{
  const unsigned default_health;
  const unsigned default_mana;

protected:
  BaseClass(unsigned def_hp, unsigned def_mp)
    : default_health(def_hp)
    , default_mana(def_mp)
  {
  }

public:
  // your functions...
};

class ArcaneWarrior
  : public BaseClass
{
public:
  ArcaneWarrior()
    : BaseClass(200, 50)
  {
  }

  // ...
};
Run Code Online (Sandbox Code Playgroud)

virtual在两个方面优于函数方法:

  • 运行时没有虚拟调度(没有开销)
  • 真实性const(这些值不能改变,永远)

虚函数没有给你const-ness,请看这个例子:

class BaseClass{
public:
  virtual unsigned GetDefaultHealth() const = 0;
  virtual unsigned GetDefaultMana() const = 0;
  // ...
};

class ArcaneWarrior
  : public BaseClass
{
  unsigned default_health, default_mana;

public:
  virtual unsigned GetDefaultHealth() const{
    return default_health;
  }

  virtual unsigned GetDefaultHealth() const{
    return default_mana;
  }

  void SetDefaults(unsigned health, unsigned mana){
    default_health = health;
    default_mana = mana;
  }
};
Run Code Online (Sandbox Code Playgroud)