
- •1. Динамические структуры данных
- •2. Динамические структуры данных. Линейные списки: Очередь, стек.
- •3. Динамические структуры данных. Деревья
- •4. Классы. Описание классов. Описание объектов. Указатель this.
- •5. Статические элементы класса. Статические поля. Статические методы.
- •6. Дружественная функция. Дружественный класс.
- •7. Деструкторы
- •8. Перегрузка операций. Перегрузка унарных операций
- •9. Перегрузка бинарных операций
- •10. Перегрузка операций присваивания
- •11. Перегрузка операции приведение типа
- •12. Наследование. Ключи доступа. Простое наследование
- •13. Виртуальные методы. Алгоритмы позднего связывания
- •Механизм позднего связывания
- •14. Множественное наследование
- •15. Создание произвольного класса на базе основного
- •16. Обработка исключительных ситуаций. Общий механизм обработки исключений
- •17. Синтаксис исключений. Перехват исключений
- •18. Список исключений функций
- •19. Иерархии исключений
- •20. Исключения в конструкторах и деструкторах
- •21. Преобразование типов. Неявные преобразования типов
- •22. Преобразования типов в выражениях
- •23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast
- •Операция const_cast
- •Операция dynamic_cast
- •24. Повышающее преобразование. Понижающее преобразование
- •25. Преобразование ссылок. Перекрестное преобразование
- •26. Преобразование типа на стадии компиляции. Операция static_cast. Операция reinterpret_cast
- •27. Динамическое определение типа. Операция type_id. Класс type_info
- •28. Потоки. Стандартные потоки. Объекты заголовочного файла iostream
- •29. Правила ввода и вывода величин
- •30. Форматирование данных. Флаги и форматирующие методы. Манипуляторы
- •31. Методы обмена с потоками. Класс iоstream
- •32. Ошибки потоков
- •33. Базовый класс ios. Методы и операции класса ios
- •34. Файловые потоки. Классы для работы с файлами: ifstream, ofstream, fstream
- •35. Строковые потоки. Базовые классы строковых потоков: istringstream, ostringstream, stringstream
- •36. Потоки и типы, определенные пользователем
- •37. Строки. Конструкторы и присваивание строк
- •38. Создание объекта string. Операция присваивания строк
- •39. Операции класса string
- •40. Функции работы со строками. Присваивание и добавление частей строк
- •41. Функции работы со строками. Преобразование строк. Поиск подстрок. Сравнение частей строк
- •42. Функции работы со строками. Получение характеристик строк
- •43. Обратные итераторы. Итераторы вставки. Потоковые итераторы
- •Обратные итераторы
- •Итераторы вставки
- •Потоковые итераторы
- •44. Функциональные объекты. Арифметические функциональные объекты
22. Преобразования типов в выражениях
Преобразования типов выполняются, если операнды, входящие в выражения, имеют различные типы. Ниже приведена последовательность преобразований.
Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:
char расширяется нулем или знаком в зависимости от умолчания для char;
unsigned char расширяется нулем;
signed char расширяется знаком;
short, unsigned short и enum при преобразовании не изменяются.
Затем любые два операнда становятся либо int, либо float, double или long double.
Если один из операндов имеет тип long double, то другой преобразуется к типу long double.
Если один из операндов имеет тип double, то другой преобразуется к типу double.
Если один из операндов имеет тип float, то другой преобразуется к типу float.
Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.
Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long.
Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned.
Иначе оба операнда должны иметь тип int.
23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast
Для выполнения явных преобразований типа в C++ существует целая группа операций —
const_cast, dynamic_cast, reinterpret_cast и static_cast, а также операция приведения типа, унаследованная из языка С.
Операция может записываться в двух формах:
тип (выражение)
(тип) выражение
Результатом операции является значение заданного типа, например:
int а = 2;
float b = 6.8;
Величина a преобразуется к типу double, a переменная b — к типу int с отсечением дробной части, в обоих случаях внутренняя форма представления результата операции преобразования иная, чем форма исходного значения.
Операция const_cast
Операция служит для удаления модификатора const. Как правило, она используется при передаче в функцию константного указателя на место формального параметра, не имеющего модификатора const.
Формат операции: const_cast <тип> (выражение)
Обозначенный тип должен быть таким же, как и тип выражения, за исключением модификатора const. Обычно это указатель. Операция формирует результат указанного типа.
Операция const_cast используется в том случае, когда программист уверен, что в теле функции значение, на которое ссылается указатель, не изменяется.
Операция dynamic_cast
Операция применяется для преобразования указателей родственных классов иерархии, в основном — указателя базового класса в указатель на производный класс, при этом во время выполнения программы производится проверка допустимости преобразования.
Формат операции: dynamic_cast <тип *> (выражение).
Выражение должно быть указателем или ссылкой на класс, тип — базовым или производным
для этого класса. После проверки допустимости преобразования в случае успешного выполнения операция формирует результат заданного типа, в противном случае для указателя результат равен нулю, а для ссылки порождается исключение bad_cast.