Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Del_Piero_10
Smart is the new Sexy
26 / 26 / 1
Регистрация: 29.12.2008
Сообщений: 109
#1

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

09.03.2009, 12:24. Просмотров 672. Ответов 9
Метки нет (Все метки)

Никак не могу понять как работает приведение типов.
В первую очередь про 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*. Объясните кто-нибудь подробно как и с чем это кушать, пожалуйста!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2009, 12:24
Ответы с готовыми решениями:

Куда деваются байты при приведении типов?
Всем доброго времени суток... Т.к. основной проект на c++, то пишу сюда......

Неопределенное поведение при приведении типа
Суть проблемы в том что, после принудительного приведения типа деструктор...

Контроль корректности при приведении типа указателя
Требуется максимально корректно проверить, что переменная типа viod* содержит...

Неверный вывод байтов int-а при приведении его до char*
template&lt;typename T&gt; void print_bytes(T val) { for (size_t i = 0; i &lt;...

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Буду благодарен! Найти предельные значения для целочисленных типов. Не...

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

Назначение базового класса в том, что он реализует методы, работающие со всеми объектами Base, как являющиеся Derived, так и не являющимися. Поскольку базовый класс ничего не знает про Derived, то его методы требуют приведения объектов к типу Base. Но если мы точно знаем, что наш объект - именно Derived, а не чистый Base, то по завершении этих методов нам может потребоваться обратное преобразование. Как его сделать - показано в примере.
1
Del_Piero_10
Smart is the new Sexy
26 / 26 / 1
Регистрация: 29.12.2008
Сообщений: 109
09.03.2009, 15:08  [ТС] #10
Спасибо разобрался
0
09.03.2009, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2009, 15:08

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

Меняется ответ при приведении функции pow к unsigned long long
Тест: 50 50 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

Ошибка в приведении типов
Здравствуйте. Я недавно начал самостоятельно изучать программирование Win32...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru