- •Преобразование типов указателей
- •Операторы определения адреса и обращения по адресу
- •Указатели на константы и константные указатели
- •Арифметические действия с указателями
- •Одномерные и многомерные массивы.
- •Строки символов. Основные функции для работы со строками.
- •Перечисление.
- •Структура.
- •Объединения.
- •Битовые поля.
- •Тип данных bool. Тип данных wchar_t.
- •Способы передачи параметров в подпрограммы.
- •Операторы распределения памяти.
- •Объявление typedef.
- •Оператор sizeof.
- •Передача аргументов по умолчанию.
- •Встроенные функции.
- •Определение пространства имён.
- •Оператор разрешения области видимости.
- •Объявление «using». Директива «using». Псевдонимы.
- •Механизм обработки исключений.
- •Вложенные исключения.
- •Определение класса.
- •Указатель this. Спецификаторы доступа к членам класса.
- •«Друзья» класса.
- •Конструктор класса. Список инициализации.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Явные конструкторы.
- •Деструкторы.
- •Встроенные функции–члены класса. Статические члены класса.
- •Функции-члены класса с квалификаторами const и volatile.
- •Вложенные классы. Локальные классы.
- •Общие правила перегрузки операторов.
- •Перегрузка оператора присваивания.
- •Оператор индексирования [].
- •Перегрузка бинарных операторов.
- •Составные операторы присваивания.
- •Оператор вызова функции.
- •Операторы преобразования типов (конверторы).
- •Структура данных – стек.
- •Структура данных – очередь.
- •Деревья.
- •Наследование
- •Доступ к членам наследуемого класса
- •Конструкторы, деструкторы и наследование
- •Наследование и присваивание.
- •Виртуальные функции.
- •Полиморфизм и позднее связывание.
- •Передача аргументов по умолчанию в виртуальные функции.
- •Виртуальные деструкторы.
- •Абстрактные классы.
- •Множественное наследование.
- •Виртуальное наследование.
Операторы преобразования типов (конверторы).
Конвертер – функция-член класса, которая преобразует тип объекта класса в некоторый другой тип. Конвертер имеет следующий прототип:
operator тип ();
Параметр тип задаёт тип данных, к которому приводится объект. Этот тип может быть как встроенным типом данных, так и типом данных, определённым пользователем.
Конвертер может вызываться как явно, так и неявно при преобразованиях типов данных. Запишем оператор преобразования типов для дробей:
В rational.h:
operator double () const;
В rlib.cpp:
ratio:: operator double () const
{return (double) n/ (double) d;}
В rtest.cpp:
ratio dr4 (3, 5);
double d = 1.1 + dr4;
Структура данных – стек.
В информатике и математике для решения задач разработан и используется ряд специальных структур данных. К таким структурам относятся матрицы, множества, стеки, очереди, деревья и т.д. в языках программирования реализация части структур данных осуществляется на встроенном уровне. Например, в языке Delphi (Pascal) реализованы такие структуры, как матрицы, массивы, множества. В языке С/С++ реализация структуры данных множества отсутствует, но присутствуют массивы и матрицы.
Однако имеется ряд структур, которые не реализованы в языках программирования. Это стек, очередь, деревья и т.д. Поэтому для того, чтобы использовать эти структуры при решении задач, их моделируют с помощью средств языка программирования. Чаще всего для моделирования используют массивы одномерные и многомерные или же динамические структуры, память под которые выделяется в процессе работы программы.
Структура данных стек представляет собой упорядоченное множество элементов, добавление и удаление которых из этой структуры происходит по следующему правилу: первым всегда удаляется элемент, который последним был добавлен в эту структуру. Все элементы должны быть однотипны. Количество элементов конечно. По сути, структура данных стек напоминает собой колодец, в который поочерёдно помещаются и из которого достаются элементы. Элемент, который был добавлен последним, всегда лежит на вершине стека. Примером задачи, в которой используется стек, является проверка баланса скобок в выражении. Встречая открывающую скобку, мы кладём её в стек. Затем, встречая закрывающую скобку, мы достаём из стека открывающую скобку. Если стек пуст после завершения процедуры, то баланс скобок соблюдён.
Ещё один пример. На железнодорожном перегоне стоят белые и чёрные вагоны вперемешку. Используя тупик, поставить вагоны в порядке белый – черный – белый … Ставим вагоны. Первый просто оставляем, а дальше проверяем, совпадает ли цвет следующего вагона с предыдущим. Если нет, то помещаем его к предыдущему вагону, а если да, то помешаем его в стек, и проверяем дальше.
Структура данных стек реализуется в языке С с помощью статических массивов, динамических массивов и динамических переменных.
Рассмотрим реализацию задачи проверки баланса скобок с помощью смоделированной на статическом массиве структуры данных стек. Для работы со структурой данных необходимо написать несколько функций:
создание стека;
помещение элемента в стек;
извлечение элемента из стека;
проверка стека на пустоту;
проверка, заполнен стек полностью или нет.
Замечание: последняя функция реализуется только при моделировании стека через массив.