Презентация на тему Лекция 30. Преобразования типов в C++

Презентация на тему Презентация на тему Лекция 30. Преобразования типов в C++, предмет презентации: Разное. Этот материал содержит 13 слайдов. Красочные слайды и илюстрации помогут Вам заинтересовать свою аудиторию. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас - поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций ThePresentation.ru в закладки!

Слайды и текст этой презентации

Слайд 1
Текст слайда:

Лекция 30. Преобразования типов в C++

Красс Александр
Alexander.Krass@gmail.com


СПбГУ ИТМО, 2009


Слайд 2
Текст слайда:

Приведение типов

Неявные преобразования типов
Явные преобразования типов
Пользовательские операторы преобразования типа


Слайд 3
Текст слайда:

Неявные преобразования типов

Неявные преобразования производятся компилятором автоматически
Для целых чисел:
Величины типа char, unsigned char, short или unsigned short преобразуются к типу int, если точность типа int достаточна, в противном случае они преобразуются к типу unsigned int.
Величины типа wchar_t и константы перечисленных типов преобразуются к первому из типов int, unsigned int, long и unsigned long, точность которого достаточна для представления данной величины.
Битовые поля преобразуются к типу int, если точность типа int достаточна, или к unsigned int, если точность unsigned int достаточна. В противном случае преобразование не производится.
Логические значения преобразуются к типу int, false становится 0 и true становится 1.


Слайд 4
Текст слайда:

Правила стандартных преобразований при выполнении арифметических операций:
вначале, если в выражении один из операндов имеет тип long double, то другой преобразуется также к long double;
в противном случае, если один из операндов имеет тип double, то другой преобразуется также к double;
в противном случае, если один из операндов имеет тип float, то другой преобразуется также к float;
затем, если в выражении один из операндов имеет тип unsigned long, то другой также преобразуется к unsigned long;
в противном случае, если один из операндов имеет тип long, а другой – unsigned int, и тип long может представить все значения unsigned int, то unsigned int преобразуется к long, иначе оба операнда преобразуются к unsigned long;
в противном случае, если один из операндов имеет тип long, то другой преобразуется также к long;
в противном случае, если один из операндов имеет тип unsigned, то другой преобразуется также к unsigned;
в противном случае оба операнда будут типа int.
При выполнении этих правил не происходит потеря точности или значащих цифр результата.


Слайд 5
Текст слайда:

Преобразования указателей и ссылок
Если имеется указатель или ссылка на производный тип, а требуется, соответственно, указатель или ссылка на базовый тип.
Если имеется указатель или ссылка на изменяемый объект, а требуется указатель или ссылка на неизменяемый объект того же типа.
Если требуются какие-то другие преобразования, их необходимо указывать явно, но в этом случае вся ответственность за правильность преобразования лежит на программисте.


Слайд 6
Текст слайда:

Явные преобразования типов

Если неявных преобразований типа не хватает, можно использовать явные. (злоупотреблять ими не стоит)
В С++ существует 4 оператора преобразования типов, плюс поддерживается преобразование в стиле C. (c-style casting не рекомендуется)
static_cast
reinterpret_cast
const_cast
dynamic_cast
Операторы имеют следующий синтаксис:
some_cast(SourceVar);


Слайд 7
Текст слайда:

static_cast

static_cast преобразовывает типы, основываясь лишь на сведениях о типах выражений, известных во время компиляции.
Операция   static_cast выполняет следующие преобразования:
Указатель к указателю
Один числовой тип к другому
Один enum к другому
Один класс в другой если между ними есть отношение наследования.
Приведение вверх по иерархии выполняется автоматически,
static_cast позволяет выполнять обратное преобразование. (что в общем случае небезопасно.)


Слайд 8
Текст слайда:

reinterpret_cast

Попытка преобразовать целое число к указателю с помощью оператора static_cast приведет к ошибке компиляции.
В этом случае можно использовать reinterpret_cast.
Используя этот оператор вы как бы говорите компилятору: “Я лучше тебя знаю, что я делаю. И вообще, твое дело компилировать, а не замечания мне делать” ☺
reinterpret-cast небезопасен по определению.


Слайд 9
Текст слайда:

const_cast

static_cast не поддерживает преобразование из const type в type. Для снятия модификатора const (или volatile) используется const_cast.


Слайд 10
Текст слайда:

dynamic_cast

dynamic_cast преобразовывает типы, основываясь на проверках времени выполнения.
Более безопасен чем static_cast, но и менее быстр.
Для его использования нужно включить поддержку RTTI.
dynamic_cast поддерживает только преобразование указателей и ссылок на полиморфные типы. (содержащие виртуальные функции)

Если преобразование указателя в указатель не возможно, возвращается 0.
Если преобразование ссылки в ссылку не возможно, возвращается std::bad_cast.
Подробно не описываю, т.к. используется редко. Можно сказать, что использование dynamic_cast свидельствует о плохом дизайне.



Слайд 11
Текст слайда:

C-style casting

Имеет следующий синтаксис:
(NewType)OldVar
NewType(OldVar)
Компилятор выполняет преобразование, используя комбинацию из static_cast, const_cast, reinterpret_cast.
Мы не знаем, что конкретно сделал компилятор.
C-style casting тяжело найти в коде, новые преобразования ищутся легко.
Новые преобразования лучше описывают намерения программиста.


Слайд 12
Текст слайда:

Пользовательские операторы преобразования типа

При неявном преобразовании типов компилятор один раз использует встроенные правила и один раз пользовательские
Преобразование из внешнего типа в наш делается через конструктор, принимающий один аргумент:
Преобразование из нашего во внешний делается через оператор приведения типа:
class String
{

String(char *s);
operator char*();
};


Слайд 13
Текст слайда:

Спасибо за внимание

Вопросы?


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика