int main()
{
Person mike{"Mike"s, 20};
Employee manager{"Sam"s, 35, 100};
Person* p{&manager};
if (p) p->print(); // this line
std::cout print(), вызывайте сотрудника::print().
Это просто академический интерес (я студент CS), но как чтобы заставить его использовать Person::print() без нарезки (разрезает ли UB?)?
Другой вопрос: наш профессор сказал, что если класс не является полиморфным (не имеет виртуальных функций) Dynamic_cast успешно работает без каких-либо ошибок, молча создавая UB. Правильно ли это и можно ли это предотвратить?
P.S. Извините за мой плохой английский и плохое знание C++. Я изучаю и то, и другое уже довольно давно, но еще не овладел ни одним из них.
Подробнее здесь: [url]https://stackoverflow.com/questions/79182920/why-upcasted-variable-use-virtual-function-from-derived-class-c[/url]
Person* p{&manager}; if (p) p->print(); // this line std::cout print(), вызывайте сотрудника::print(). Это просто академический интерес (я студент CS), но как чтобы заставить его использовать Person::print() без нарезки (разрезает ли UB?)? Другой вопрос: наш профессор сказал, что если класс не является полиморфным (не имеет виртуальных функций) Dynamic_cast успешно работает без каких-либо ошибок, молча создавая UB. Правильно ли это и можно ли это предотвратить? P.S. Извините за мой плохой английский и плохое знание C++. Я изучаю и то, и другое уже довольно давно, но еще не овладел ни одним из них.