我有一个带结构的标题:
#ifndef CHARACTER_H_
#define CHARACTER_H_
#include <string>
using namespace std;
struct Character
{
string name;
static string type;
static int baseHp, baseAttack, baseDefence;
};
#endif
我有一个继承该头的类,我想在继承类的struct中定义静态变量。说我的继承类如下:
#include "Character.h"
#include <string>
class Rouge: private Character
{
public:
Rouge(string name)
{
this->name = name;
}
string getName()
{
return name;
}
};
在Rouge
类中我将定义Character
标头中声明的静态变量,以及如何进行此操作?
答案 0 :(得分:2)
您可以将它们定义为Rouge
不存在;他们是Character
的成员:
string Character::type;
int Character::baseHp;
int Character::baseAttack;
int Character::baseDefence;
所以,如果你期望从Character
派生的每个类都有所不同,你会感到失望:数据成员不能被“覆盖”。
相反,通常会覆盖在基础中声明但是使纯虚拟的getter函数,以便Character
变为纯粹,Rouge
必须覆盖这些函数,例如根据需要返回该特定类型的值。
答案 1 :(得分:1)
实现可以按类型覆盖的固定值的一种简单方法是使用生成这些值的虚函数:
class Animal
{
public:
virtual
auto number_of_tails() const -> int { return 0; }
};
class Doggie
: public Animal
{
public:
auto number_of_tails() const -> int override { return 1; }
};
我希望我将override
关键字放在正确位置。
如果您希望在没有类实例的情况下获得此信息,只需根据静态函数实现:
class Doggie
: public Animal
{
public:
auto number_of_tails() const -> int override { return the_number_of_tails(); }
static
auto the_number_of_tails() const -> int { return 1; }
};
免责声明:编译器从未触及过代码。