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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
#1

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

09.03.2009, 12:24. Просмотров 628. Ответов 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*. Объясните кто-нибудь подробно как и с чем это кушать, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2009, 12:24     Ну жна помощь в приведении типов
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 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
Почетный модератор
6474 / 2249 / 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
Почетный модератор
6474 / 2249 / 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
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.03.2009, 13:24     Ну жна помощь в приведении типов #8
Тогда в чем же вопрос. Удали это строку и проверь.
Если бы указывал на объект типа Base, то приведение было бы невозможно. так?
И будешь знать. Я не понимаю, к чему такой вопрос, если в течение пяти секунд все можно самому проверить.
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++
Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме записи(тригонометрической и алгебраической). Для класа...

Приведение типов - C++
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

Преобразование типов - C++
Вот я создаю двумерный массив n=1; m=2; char **mas=new char *; mas=new char; после этого мне нужно увеличить размер...

С++ преобразование типов - C++
Есть переменная целочисленного типа например int A(например 2356).Нужно преобразовать ее к типу LPTCSTR и передать ее WinAPI функции...


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

Или воспользуйтесь поиском по форуму:
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     Ну жна помощь в приведении типов
Ответ Создать тему
Опции темы

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