не работает dynamic_cast
От: Amouse Россия  
Дата: 16.12.13 15:14
Оценка: -1 :))) :))) :)
вот такой код

class A1
{
public:
    int ini1;
    int i;

    A1()
    {
        ini1 = 1;
    }

    virtual ~A1() {}

    virtual void func1()
    {
        i = 0;
    }
};

class B1: public A1
{
public:
    int j;

    B1() : j(0) {}

    virtual void func1()
    {
        j = 3;
    }
};

...
    A1* pa1 = new A1;
    B1* pb1 = new B1;

    A1* sdfs = dynamic_cast<A1*>(pb1);
    B1* pb2 = dynamic_cast<B1*>(pa1);


pb2 = 0 в результате.
Почему??
rtti включено
Re: не работает dynamic_cast
От: John1979  
Дата: 16.12.13 15:21
Оценка: 20 (3) +6 :)
Здравствуйте, Amouse, Вы писали:

A>pb2 = 0 в результате.

A>Почему??
потому, что dynamic_cast работает
Re: не работает dynamic_cast
От: visual_wind  
Дата: 16.12.13 15:31
Оценка: 35 (2)
Здравствуйте, Amouse, Вы писали:

A>вот такой код


A>    A1* pa1 = new A1;
A>    B1* pb1 = new B1;

A>    A1* sdfs = dynamic_cast<A1*>(pb1);
A>    B1* pb2 = dynamic_cast<B1*>(sdfs); 
A>


A>pb2 = 0 в результате.

A>Почему??
A>rtti включено

Вот так будем работать. У вас не работает, потому что pa1 исходно указывает на А*, и dynamic_cast не находит у него информации, позволяющей преобразовать его к В*.
Re: не работает dynamic_cast
От: McQwerty Россия  
Дата: 16.12.13 18:02
Оценка:
Здравствуйте, Amouse, Вы писали:

A>
A>class A1;
A>class B1: public A1;

A>    A1* pa1 = new A1;
A>    B1* pb2 = dynamic_cast<B1*>(pa1); 
A>


A>pb2 = 0 в результате.

A>Почему??
A>rtti включено

Отключи RTTI и используй reinterpret_cast.
А потом посмотри, что получится и всё тебе откроется.
Серьёзно. Попробуй вызвать func1 или уточнить значение B1::j.
Re[2]: не работает dynamic_cast
От: Хреннос  
Дата: 17.12.13 07:40
Оценка: 4 (1)
Здравствуйте, McQwerty, Вы писали:

MQ>Серьёзно. Попробуй вызвать func1 или уточнить значение B1::j.


И мы увидим новую тему от ТС: "не работает компилятор, выдает фигню".

Я бы посоветовал ТСу не заниматься шаманством и не пытаться выяснить опытным путем, как работают всякие хитрые аспекты С++.
Гораздо продуктивнее сначала почитать документацию или (если документация слишком забубенная) — статейки всякие. Например, вот тут неплохо расписаны касты в С++: http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast
Re[2]: не работает dynamic_cast
От: Mr.Delphist  
Дата: 17.12.13 22:58
Оценка:
Здравствуйте, McQwerty, Вы писали:

Тут это... порой даже при this==NULL порой можно позвать методы (если виртуальности нет). Будьте осторожны в сових желаниях.
Re[3]: не работает dynamic_cast
От: John1979  
Дата: 18.12.13 05:18
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Тут это... порой даже при this==NULL порой можно позвать методы (если виртуальности нет). Будьте осторожны в сових желаниях.

+100500
тем более, что тут рядом буквально с неделю назад был топик на тему "как такое может быть, что this==null"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.