• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Для Чего Нежен Dynamic_cast?

  • Автор темы hhome
  • Дата начала
H

hhome

В википедии написано только про приведение типов

C++:
class A
{
public:
virtual void foo()	{}
};

class B : public A
{
public:
void methodSpecificToB()	{ std::cout << "B::methodSpecificToB()\n"; }
};


void my_function(A &my_a)
{
try
{
B &my_b =dynamic_cast<B&>(my_a);
my_b.methodSpecificToB();
}
catch (const std::bad_cast& e)
{
std::cerr << e.what() << std::endl;
std::cerr << "Этот объект не является объектом типа B" << std::endl;
}
}

А есть ли у dynamic_cast другие полезные свойства или только одно это?
 
R

rrrFer

dynamic_cast нужен для приведения типов во время выполнения.
При этом если привести тип не удалось, он вернет nullptr.

Только для этого он и нужен.
 
R

rrrFer

Остается добавить, что dynamic_cast-a рекомендуется избегать.
наличие динамиккаста - признак говнокода )

И только в редких случаях он оправдан.
Суть в том, что с++ - язык с жесткой типизацией, которая позволяет проводить кучу проверок во время компиляции.
Проверки во время выполнения не безопасны и могу приводить к ошибкам, которые трудно найти.
 
W

Whatka

согласен с r04
встречал использование вместо typeid

C++:
//
Father *fp;
Son *sp;//класс наследник )
...
if(typeid(*fp)==typeid(Son))
sp=(Son*) fp;

try{
sp = dynamic_cast <Son *> (fp);
..
}
//
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!