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

C具有子类特定值的非变化成员变量,第1张

概述因此,我的类层次结构是:BaseClass(是一个抽象类)然后它有三个继承自它的子类:ArcaneWarrior,Guardian,Magi. 我想为DefaultHealth和DefaultMana提供两个特定于每个子类的非变化值,因为它们对于两个变量都具有不同的值. 我想我只是在寻找最好/最有效的方法来做到这一点. 我应该只在基类中有两个虚函数来返回DefaultHealth和DefaultM @H_419_6@ 因此,我的类层次结构是:BaseClass(是一个抽象类)然后它有三个继承自它的子类:ArcaneWarrior,Guardian,Magi.

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

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

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

我很欣赏任何见解

解决方法 我的投票转到基类中的const值和受保护的构造函数:

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)  {  }  // ...};

这在两个方面优于虚函数方法:

>运行时没有虚拟调度(没有开销)
>真正的常数(这些值不能改变,永远)

虚函数不会给你持久性,请看这个例子:

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

以上是内存溢出为你收集整理的C具有子类特定值的非变化成员变量全部内容,希望文章能够帮你解决C具有子类特定值的非变化成员变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存