Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры / ООП(Тимофеев) / ООП-Тимофеев.doc
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
328.19 Кб
Скачать

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

Ключевое слово 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 () прибавляет одну секунду к неявному аргументу перегруженного оператора ++.

Соседние файлы в папке ООП(Тимофеев)