![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
m9yt |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Привет всем.
Есть следующий код:
Почему-то пример1 работает, т.е. функция get возвращает указатель, а 2 пример, по-моему, релизует то же самое, но с указателем p2 проблема-функция get не работает. Помогите разобраться! Это сообщение отредактировал(а) m9yt - 18.6.2010, 15:54 |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
m9yt, dymamic_cast может преобразовать только те объекты, которые принадлежат классу переданного в качестве параметра объекта или являются базовыми классами этого объекта. В обратную сторону не работает.
|
|||
|
||||
m9yt |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
Тогда в чём смысл этого кода?
|
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
||||
|
||||
m9yt |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 27.2.2010 Репутация: нет Всего: нет |
||||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
Он указывает на тот же самый объект, только после этого преобразование компилятор будет считать, что он указывает на предка, но поскольку на самом деле этот объект предком не является, то работать программа будет неправильно. В вашем случае при вызове метода get из указателя p2 вызывается не метод get() класса meaning, а класса word, из-за того, что виртуальная функция. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
dynimic_cast нужен для преобразования указателя/ссылки на предка в указатель/ссылку на потомка в том случае, когда не известно точно, на какого именно потомка указывает указатель/ссылка. Работает ТОЛЬКО для классов с виртуальными методами.
static_cast может использоваться тогда, когда достоверно известно, что указатель/ссылка указывает именно на нужного потомка. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
(не для новичков) добавлю для полноты : также для cross_cast`инга при множественном наследовании.. Это сообщение отредактировал(а) mes - 19.6.2010, 13:03 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |