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

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

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

Если бы мне удалось построить этот сценарий, я ожидал бы, что`ID` поле`Base*` указатель, я должен получить различные значения в зависимости от того, был ли указатель создан как`new A()`, `new B()` или же`new C()`.

Мое предположение будет объявить`ID` как`virtual static const`что, конечно, не имеет смысла и дает ошибку компилятора.

Но что я могу сделать для достижения описанного результата? (Единственное, что я мог себе представить, это объявить`ID` как виртуальная функция, возвращающая целое число, а затем жестко закодировать значение в теле функции, но я ищу что-то более элегантное.)

Заранее спасибо!

`static` метод не может быть`virtual`и никакие члены данных не могут быть`virtual`.

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

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