Можно ли объявить виртуальное статическое постоянное значение в классе 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) {}
};