Я хотел бы иметь базовый класс с постоянным полем (например, уникальный идентификатор, связанный с классом, который не может быть изменен после времени компиляции). Пока что объявление static const
будет в порядке. Теперь я хотел бы наследовать этот базовый класс и убедиться, что у детей этого класса есть одно и то же поле, но с их собственными значениями. Как я могу это сделать?
Скажем, я хотел бы иметь базовый класс с именем Base
с полем ID
, который содержит значение int
0. Тогда я хотел бы иметь классы A
, B
и C
, все из которых являются открытыми дочерними элементами Base
, и я хотел бы убедиться, что у этих детей также будут поля ID
с соответствующими значениями 1, 2 и 3 (путем создания Конечно, я имею в виду что-то вроде получения ошибки компилятора, если у них нет явно объявленного ID).
Если бы мне удалось создать этот сценарий, я ожидал, что с запросом поля ID
указателя Base*
, я должен получить разные значения в зависимости от того, был ли указатель создан как new A()
, new B()
или new C()
.
Мое предположение заключалось бы в объявлении ID
как virtual static const
, что, конечно, не имеет смысла и дает ошибку компилятора.
Но что я могу сделать для достижения описанного результата? (Единственное, что я мог себе представить, было бы объявить ID
как виртуальную функцию, возвращающую целое число, а затем жестко закодировать значение в тело функции, но я ищу что-то более элегантное.)
Заранее благодарю вас!