我有一个基类Character
,可以Attack()
,和派生类Magician
(10),Elf
(5)或Giant
(15)。魔术师可以进化到BlackMagician
(15)
每种类型的Character
都有一个定义的Power
(在括号中)。我的问题是如何将一个类与一个静态函数getFamilyPower()
相关联,并相应地覆盖它。
代码如下:https://codecollab.io/@sdudnic/warriors
其思路如下:
class Character {
static int power;
public:
static int getPower() { return power; }
virtual int Attack(Character *other) { /*...*/ }
};
class Magician : public Character {
static int power = 10;
public:
static int getPower() {return power; }
};
class Elf : public Character {
static int power = 5;
public:
static int getPower() {return power; }
};
class Giant : public Character {
static int power = 15;
public:
static int getPower() {return power; }
};
2条答案
按热度按时间a8jjtwal1#
只有
virtual
方法可以被覆盖。但是static
方法不能是virtual
,因为它没有this
示例指针来访问vtable。因此每个Character
都需要一个非静态virtual
方法来报告其当前的电源级别,例如:7hiiyaii2#
我想你可能把静态和常量搞混了。
私有:常数整数幂= 10;//在基类中,默认值为10
//虚拟化并重写Power函数以返回const int值。