- •Базовое ядро языка Элементы программы.
- •Комментарии
- •Инструкция – выражение
- •Инструкция
- •Определение функции
- •Заголовок функции
- •Прототипы функций
- •Аргументы по умолчанию.
- •Перегрузка функций
- •Встраиваемые функции
- •Стек до блока Вошли в блок Вышли из блока
- •Индексирование
- •Int a [100]; одномерный массив
- •Int b [3][5]; двухмерный массив
- •Int c [7][9][2]; трехмерный массив
- •Передача массивов функциям
- •Объявления ссылок и вызовов по ссылке
- •Функции-члены класса
- •Доступ: закрытый и открытый
- •Область видимости класса
- •Оператор разрешения области видимости ::
- •Вложенные классы
- •Статические члены данных
- •Указатель this
- •Функции-члены типа static и const.
- •Изменчивость (mutable)
- •Создание и уничтожение объектов
- •Классы с конструкторами
- •Конструкторы как преобразования
- •Создание динамического стека
- •Классы с деструкторами
- •Пример: динамически размещаемые строки
- •Ad hoc полиморфизм
- •Алгоритм выбора перегруженной функции
- •Перегрузка операторов
- •Перегрузка бинарных операторов
- •Перегрузка операторов присваивания и индексирования
- •Перегруженные операторы ввода-вывода « и »
- •Перегрузка оператора ( ) для индексирования
- •Операторы указателей
- •Указатель на член класса
- •Перегрузка new и delete
- •Наследование.
- •Методология объективно-ориентированного проектирования
- •Виртуальные функции
- •Абстрактные базовые классы
Перегрузка операторов
Ключевое слово operator используется для того, чтобы определить функцию-член, осуществляющую преобразование типа. Оно также используется для перегрузки встроенных операторов C++. Также как имени функции, такому как print, можно придать множество различных смыслов, зависящих от аргументов, так и оператору, например, +, можно приписать дополнительные значения. Перегруженные операторы можно использовать для привычной записи выражений как для встроенных типов, так и для АТД. Это очень удобный способ записи, во многих случаях он делает программы короче и читабельнее.
Унарные и бинарные операторы могут быть перегружены как нестатические функции-члены. Они неявно действуют на объект класса. Большинство унарных операторов можно перегружать как обычные функции, принимающие единственный аргумент класса или ссылку на тип класса. Большинство бинарных операторов можно перегружать как обычные функции, принимающие один или оба аргумента класса или ссылку на тип класса. Операторы =, (), [ ] и -> должны быть перегружены нестатическими функциями-членами.class foo {Public : foo operator-() foo operator-(int); foo operator-(foo) ; };foo operator-(int, foo); foo operator-(int,foo*); r = s * t; вызвало бы функцию умножения. Все это заменяет форму записи в виде функции r = mру(s, t) ;
, приоритет оператора умножения остается более высоким, чем приоритет оператора сложения. все операторы могут быть перегружены. Исключения составляют операторы выбора члена «.» и <. *>, тернарный условный оператор «? :», оператор sizeof и оператор разрешения области видимости <<:: >>.
Доступные для перегрузки операторы включают все арифметические и логические операторы, операторы сравнения, равенства, присваивания и битовые операторы. Более того, операторы автоинкремента и автодекремента (++ и --) могут иметь различные префиксные и постфиксные значения Операторы индексации массива [ ] и вызова функции () также можно перегружать.
Это возможно и для операторов доступа к члену через указатель на объект ->, и обращения к члену через указатель на член ->* Можно перегружать new и delete. Операторы присваивания, вызова функции, индексирования и оператор доступа к члену через указатель на объект -> можно перегружать только нестатическими функциями-членами.
Перегрузка унарных операторов
как можно перегрузить унарные операторы, такие как !, ++, ~ и [ ].
class clock { public: clock(unsigned long i);//конструктор и преобразование
void print() const. //отформатированный вывод void tick(); //добавляет одну секунду
clock operator++(){ tick(); return *this;} void reset (const clock& c);
friend clock operator +(clock cl, clock c2) ; clock operator -(clock c) ;
friend clock operator *(unsigned long m, clock c) ;friend clock operator *(clock c, unsigned long m) ;
private: unsigned long tot_secs, sees, mins, hours, days;
};
Этот класс перегружает префиксный оператор автоинкремента.
Функция-член tick () прибавляет одну секунду к неявному аргументу перегруженного оператора ++.