Нет, конструктор не может быть виртуальным методом.
Причины:
- На момент вызова конструктора объект еще не полностью построен. V-table (таблица виртуальных функций) инициализируется после завершения работы конструктора базового класса и в процессе работы конструктора производного класса. Вызов виртуальной функции требует наличия корректной v-table.
- Виртуальность используется для вызова функций производных классов через указатель или ссылку на базовый класс. Конструктор вызывается явно по имени класса, а не через указатель/ссылку на объект. Невозможно иметь указатель или ссылку на "неполностью построенный" объект для вызова его