如何定义从结构继承的静态变量?

时间:2014-09-02 23:51:50

标签: c++ struct static

我有一个带结构的标题:

#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标头中声明的静态变量,以及如何进行此操作?

2 个答案:

答案 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; }
};

免责声明:编译器从未触及过代码。