Можно ли объявить значение виртуальной статической константы в классе 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
как виртуальная функция, возвращающая целое число, а затем жестко закодировать значение в теле функции, но я ищу что-то более элегантное.)
Заранее спасибо!