Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11.ООП.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
236.03 Кб
Скачать

Перегрузка операторов

Ключевое слово operator используется для того, чтобы определить функцию-член, осуществляющую преобразование типа. Оно также используется для перегрузки встроенных операторов C++. Также как имени функции, такому как print, можно придать множество различных смыслов, зависящих от аргументов, так и оператору, например, +, можно приписать доп значения. Перегруженные операторы можно исп-ть для привычной записи выр-ий как для встроенных типов, так и для АТД.

Унарные и бинарные операторы могут быть перегружены как нестатические функции-члены. Они неявно действуют на объект класса. Большинство унарных операторов можно перегружать как обычные функции, принимающие единственный аргумент класса или ссылку на тип класса. Большинство бинарных операторов можно перегружать как обычные функции, принимающие один или оба аргумента класса или ссылку на тип класса. Операторы =, (), [ ] и -> должны быть перегружены нестатическими функциями-членами.

class foo {

public:

foo operator- ();//унарный минус: - foo

foo operator- (int) ; //бинарный минус: foo - int

foo operator-(foo); };//бинарный минус: foo - foo

foo operator-(int, foo); //бинарный минус: int - foo

Доступные и недоступные для перегрузки операторы:

Нельзя: составляют операторы выбора члена,условный оператор ?, оператор sizeof и оператор разрешения области видимости ::

Можно: арифметические и логические операторы, операторы сравнения, равенства, присваивания и битовые операторы, операторы автоинкремента и автодекремента ( + + и —), опер-ры индексации массива [] и вызова функции (), опер-ры доступа к члену через указатель на объект - >, и обращения к члену через указатель на член ->*, new и delete.

Перегрузка обычными функция, как компонентными

Выбор между представлением в виде функции-члена или обычной функции /функции-не-члена) обычно зависит от того, допустимо и желательно ли неявное преобразование. Явная передача аргумента допускает его автоматическое приведе­ние, если это необходимо и возможно. Если перегрузка осуществлена функцией-чле­ном, то + + с равнозначно с . operator++ () Если перегрузка выполнена функцией-не-членом, то + + с равнозначно operator++ (с)

Примеры перегрузки операторов:

class clock {

public:

clock(unsigned long i); void print() const;

void tickO; //добавляет одну секунду

clock operator++(){ tick(); return *this; } // обновляет неявную переменную типа clock и возвращает обновленное значение

void reset (const clocks 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;}

Можно перегрузить префиксный оператор ++, используя и обычную функцию:

clock operator++(clocks cl)

{cl.tick{); return cl;}

Перегрузка оператора индексирования:

имя_класса&. operator [] (целочисленный тип) ;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]