- •Преобразование типов указателей
- •Операторы определения адреса и обращения по адресу
- •Указатели на константы и константные указатели
- •Арифметические действия с указателями
- •Одномерные и многомерные массивы.
- •Строки символов. Основные функции для работы со строками.
- •Перечисление.
- •Структура.
- •Объединения.
- •Битовые поля.
- •Тип данных bool. Тип данных wchar_t.
- •Способы передачи параметров в подпрограммы.
- •Операторы распределения памяти.
- •Объявление typedef.
- •Оператор sizeof.
- •Передача аргументов по умолчанию.
- •Встроенные функции.
- •Определение пространства имён.
- •Оператор разрешения области видимости.
- •Объявление «using». Директива «using». Псевдонимы.
- •Механизм обработки исключений.
- •Вложенные исключения.
- •Определение класса.
- •Указатель this. Спецификаторы доступа к членам класса.
- •«Друзья» класса.
- •Конструктор класса. Список инициализации.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Явные конструкторы.
- •Деструкторы.
- •Встроенные функции–члены класса. Статические члены класса.
- •Функции-члены класса с квалификаторами const и volatile.
- •Вложенные классы. Локальные классы.
- •Общие правила перегрузки операторов.
- •Перегрузка оператора присваивания.
- •Оператор индексирования [].
- •Перегрузка бинарных операторов.
- •Составные операторы присваивания.
- •Оператор вызова функции.
- •Операторы преобразования типов (конверторы).
- •Структура данных – стек.
- •Структура данных – очередь.
- •Деревья.
- •Наследование
- •Доступ к членам наследуемого класса
- •Конструкторы, деструкторы и наследование
- •Наследование и присваивание.
- •Виртуальные функции.
- •Полиморфизм и позднее связывание.
- •Передача аргументов по умолчанию в виртуальные функции.
- •Виртуальные деструкторы.
- •Абстрактные классы.
- •Множественное наследование.
- •Виртуальное наследование.
Вложенные классы. Локальные классы.
Класс, объявленный внутри другого класса, называется вложенным классом. Класс, в котором объявлен вложенный класс, называется объемлющим классом.
Функции объемлющего класса не имеют прав доступа к закрытым элементам своего вложенного класса. Так же и функции вложенного класса не имеют прав доступа к закрытым элементам класса, внутри которого он объявлен. Чтобы предоставить такие права вложенному или объемлющему классу, нужно объявить такой класс другом соответственно объемлющего или вложенного класса.
Пример:
Class matrix
{long n, m; //размер матрицы
double *p; //указатель на матрицы
matrix (); //конструктор
class row
{long m; //размер строки
double *p; //указатель на строку
public
…
};
……
};
Локальные классы.
Класс, определённый внутри тела функции, называется локальным.
Такой класс виден только внутри тела функции. Функции локального класса должны определяться внутри самого класса.
Пример:
Int inc (int n)
{class Inc
{int inc (int n) {return ++n;} };
Inc i;
return i. inc (n);
}
Int main ()
{cout<<inc (10)<<endl; //n = 11
return 0;
}
Общие правила перегрузки операторов.
В языке С++ операторы рассматриваются как функции, имеющие следующий синтаксис:
Возвращаемый_тип operator имя_оператора (список_параметров)
Возвращаемый тип – тип данных, возвращаемых функцией, operator – ключевое слово, имя оператора – «+», «-», «>» и т.д., список параметров определяет перечень операндов, участвующих в операции.
В силу того, что оператор представляется функцией, их как и функции можно перегружать. Перегружаются почти все операторы за исключением следующих случаев:
1. нельзя перегрузить следующие операторы: «.» - оператор доступа к членам класса, «.*» - оператор доступа к члену класса через указатель, «::» - оператор разрешения области видимости, «:?» - условный оператор.
2. нельзя перегружать препроцессорные символы: «#» - преобразование в строку, «##» - соединение строк.
3. нельзя перегружать операторы преобразования типов данных: «static_cast», «dinamic_cast», «reinterpret_cast», «const_cast».
Перегрузка операторов должна удовлетворять следующим требованиям:
нельзя вводить новые операторы;
не допускается перегрузка операторов со встроенными типами данных в качестве параметров. По крайней мере, один параметр перегружаемого оператора должен быть классом.
нельзя изменять количество аргументов оператора;
приоритеты перегруженных операторов не изменяются;
оператор не может иметь аргументов по умолчанию, за исключением оператора вызова функции ();
оператор не может иметь неопределённого количества параметров, за исключением оператора вызова функции ().
Перегруженные операторы разрешается определять как члены класса и как функции, не являющиеся членами класса. Один оператор может быть перегружен несколько раз. Если оператор перегружен как член класса, то он не должен иметь спецификатор static и его первым операндом по умолчанию является объект класса, для которого вызывается этот оператор. Перегруженные операторы можно определять прямо в теле класса как встроенные функции. Перегруженные операторы могут вызываться двумя способами: явно (как функция) или неявно (используя операторную запись).
Пример:
//класс ratio
Ratio a (1, 2), b (1, 2), c (0, 1);
c.operator += (a); //явно
c += a; //неявно
c = operator + (a, b); //явно
c = a + b; //неявно