dynamic_cast завершается ошибкой при приведении базового класса к производному классу
Это то, что должно произойти. Когда вы динамически c приводите указатель к объекту, чей динамический c тип не является приведенным типом, в результате вы получаете нулевой указатель.
В вашем примере вы косвенно используете нулевой указатель и попытайтесь вызвать функцию-член, которая приводит к неопределенному поведению.
При использовании динамического преобразования c вы всегда должны проверять, получили ли вы значение null.
, если я использую reinterpret_cast ...
Тогда поведение все равно будет неопределенным, потому что вы будете косвенно указывать через указатель на несуществующий объект. Если вы не создадите экземпляр производного класса, вы не сможете вызвать его функцию-член non stati c.
Вы можете преобразовать базовый экземпляр в производный, например:
Base b;
Derived d = b;
Что происходит, так это то, что базовый подобъект производного экземпляра инициализируется копией из b
.