Ключове слово operator
Як використати звичайні операції з визначеними користувачем типами? В цьому оголошенні використане ключове слово operator для перезавантаження операції ++
void operator++()
Спершу пишуть повернутий тип (в нашому випадку void), потім ключове слово operator, потім саму операцію (++) і нарешті список аргументів, взятий у дужки (в даному випадку порожній). Такий синтаксис повідомляє оператору, що коли аргумент належить класу Counter, то потрібно викликати функцію з таким іменем, зустрівши в тексті програми операцію ++.
Компілятор може розрізняти перезавантажувані функції за типом даним та кількістю аргументів (сигнатурою). Перезавантажувані операції компілятор розрізняє за типом даних їх операндів. Якщо операнд має базисний тип, такий як int в операторі
++intvar;
то компілятор буде використовувати свою вбудовану процедуру для збільшення змінної типу int. Але, якщо операнд є об’єктом класу Counter, то компілятор буде використовувати написану програмістом функцію operator++() (нагадаємо, що це явище називається поліморфізмом).
Аргументи операції
В функції main() операція ++ застосована до об’єкту, як у виразі ++с1. Досі функція operator++() не мала аргументів. Що ж вона збільшує? Вона збільшує змінну count об’єкта, до якого застосовується. Оскільки методи класу завжди мають доступ до об’єктів класу, для яких були викликані, то ця операція не потребує аргументів.
Значення, що повертаються операцією
Функція operator++() програми 14.1 має невеличкий дефект. Ми можемо його виявити, якщо використаємо в функції main() рядок:
c1=++c2
Компілятор видасть повідомлення про помилку. Причиною її є те, що ми визначили тип void для повернутого значення функції operator++(). А в нашому виразі присвоювання буде запитана змінна типу Counter. Тобто компілятор запитуватиме значення змінної с2, після того як вона буде оброблена операцією ++, і присвоїть її значення змінній с1. Але, при даному нами визначенні в 14.1, ми не можемо використовувати ++ для збільшення об’єкту Counter у виразі присвоювання: з таким операндом може бути використана лише операція ++.
Для того, щоб мати можливість використовувати написаний нами operator++() у виразах присвоювання, нам необхідно правильно визначити тип значення, яке він повертає. Це зроблено в програмі 14.2
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Counter
{private:
unsigned int count;
public:
Counter():count(0) //constructor
{ cout <<"constructor"<<endl;};
Counter operator++()
{++count;
Дата добавления: 2015-08-26; просмотров: 578;