1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем hhome, 27 сен 2013.

  1. hhome

    hhome New Member

    Репутация:
    0
    Регистрация:
    27 сен 2013
    Сообщения:
    1
    Симпатии:
    0
    В википедии написано только про приведение типов

    Код:
    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 другие полезные свойства или только одно это?
     
  2. rrrFer

    rrrFer Гость

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

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

    rrrFer Гость

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

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

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    согласен с r04
    встречал использование вместо typeid

    Код:
    //
    Father *fp;
    Son *sp;//класс наследник )
    ...
    if(typeid(*fp)==typeid(Son))
    sp=(Son*) fp;
    
    try{
    sp = dynamic_cast <Son *> (fp);
    ..
    }
    //
     
Загрузка...

Поделиться этой страницей