Можно ли объявить виртуальное статическое постоянное значение в классе C++?

я хотел бы иметь базовый класс с постоянным полем (например, уникальный идентификатор, связанный с классом, который нельзя изменить после времени компиляции). Пока static const объявление было бы просто отлично. Теперь я хотел бы наследовать этот базовый класс и убедиться, что дети этого класса имеют одно и то же поле, но со своими собственными значениями. Как я могу это сделать?

допустим, я хотел бы иметь базовый класс под названием Base С ID поле, содержащее int значение 0. Тогда, я хотел бы иметь классы A, B и C, все они являются публичными детьми Base и я хотел бы убедиться, что у этих детей также будет ID поля с соответствующими значениями 1, 2 и 3 ("убедившись", я имею в виду что-то вроде получения ошибки компилятора, если у них нет явно объявленного идентификатора).

если бы мне удалось построить этот сценарий, мое ожидание было бы, что просить

1 ответов


A static метод не может быть virtual, и данные могут быть virtual.

но вы можете скрыть static поля в производных классах и использовать virtual метод для их возврата.

class A
{
public:
    static const int ID = 0;
    virtual int getID() { return A::ID; }
};
class B : A
{
public:
    static const int ID = 1;
    virtual int getID() { return B::ID; }
};

альтернатива:

class A
{
public:
    A(int id = 0) : ID(id) {}
    const int ID;
    getID() { return ID; }
};
class B : public A
{
public:
    B() : A(1) {}
};