Форум программистов, компьютерный форум CyberForum.ru

Ну жна помощь в приведении типов - C++

Восстановить пароль Регистрация
 
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 12:24     Ну жна помощь в приведении типов #1
Никак не могу понять как работает приведение типов.
В первую очередь про dynamic_cast. Допустим у нас есть такая часть программы

C++
1
2
3
4
5
6
Base *bp, b_ob;
Derived *dp, d_ob;
 
bp = &d_ob;
dp = dynamic_cast<Derived *> (bp)
if (dp) cout << "Приведение успешно"
Класс Base наследуется класом derived.

Не могу понять зачем здесь нужен указатель dp. и чему он должен быть равен после пиведения. Ведь по идее здесь просто указатель bp должен поменять свой тип с Base* на Derived*. Объясните кто-нибудь подробно как и с чем это кушать, пожалуйста!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 12:35     Ну жна помощь в приведении типов #2
C++
1
int length = strlen(str);
Для чего здесь переменная length, ведь у нас вместо строки str должна получиться ее длина...
Смысл понятен?
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 12:40  [ТС]     Ну жна помощь в приведении типов #3
Да. А теперь про приведение типов можно? ))
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 12:40     Ну жна помощь в приведении типов #4
А что с ним?
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 12:47  [ТС]     Ну жна помощь в приведении типов #5
C++
1
dp = dynamic_cast<Derived *> (bp)
Получается мы этим оператором пользуемся для того, что бы передать адрес из bp в dp. Потому как они разны типы, нам необходимо сначала привести их к одному типу. Все это возможно, потому что bp указывает на объект типа Derived. Если бы указывал на объект типа Base, то приведение было бы невозможно. так?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 13:06     Ну жна помощь в приведении типов #6
Все это возможно, потому что bp указывает на объект типа Derived
Ты на код смотришь?
C++
1
Base *bp,
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 13:09  [ТС]     Ну жна помощь в приведении типов #7
C++
1
bp = &d_ob;
Но здесь то он указывает на объект типа Derived.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 13:24     Ну жна помощь в приведении типов #8
Тогда в чем же вопрос. Удали это строку и проверь.
Если бы указывал на объект типа Base, то приведение было бы невозможно. так?
И будешь знать. Я не понимаю, к чему такой вопрос, если в течение пяти секунд все можно самому проверить.
Alexiski
Любитель давать советы
 Аватар для Alexiski
338 / 130 / 2
Регистрация: 12.01.2009
Сообщений: 511
09.03.2009, 14:06     Ну жна помощь в приведении типов #9
В этом примере показывается, как работает приведение классов, но, действительно, не показывается зачем оно нужно.

Назначение базового класса в том, что он реализует методы, работающие со всеми объектами Base, как являющиеся Derived, так и не являющимися. Поскольку базовый класс ничего не знает про Derived, то его методы требуют приведения объектов к типу Base. Но если мы точно знаем, что наш объект - именно Derived, а не чистый Base, то по завершении этих методов нам может потребоваться обратное преобразование. Как его сделать - показано в примере.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2009, 15:08     Ну жна помощь в приведении типов
Еще ссылки по теме:

Приведение типов C++
C++ Преобразование типов
Контроль корректности при приведении типа указателя C++
C++ Куда деваются байты при приведении типов?
Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 15:08  [ТС]     Ну жна помощь в приведении типов #10
Спасибо разобрался
Yandex
Объявления
09.03.2009, 15:08     Ну жна помощь в приведении типов
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru