Глава 16. Перегрузка операций________________________________383

4 {

5 public

6 INT ( int a = 0): data (a) {};

7 friend INT operator+ ( const INTS Ihs, const INT& rhs);

8 friend ostream operator« (ostreams os, INT& rhs);

9

10 private:

11 int data;

12 };

13 // Это не член класса INT

14 INT operator+ ( const INT& Ihs, const INT& rhs)

15 {

16 INT t = Ihs.data + rhs.data;

17 return t;

18 }

19 // Это не член класса INT

20 ostream operator« ( ostream& os, INT& rhs.)

21 {

22 return os « rhs.data; •

23 }

24 void main ()

25 {

26 INT a(5), b(6) ;

27 INT с = a + b;

28 cout « "a= " « a « "b= " « b « "c= " « с « endl;

29 }

В первой строке указано имя файла и основное его назначение.

Строка 2 подключает заголовочный файл iostream.h для обеспечения доступа к объектам cout.

Строки 3—12 определяют класс INT. Конструктор класса — это пустая функция со списком инициализации (data (а)), принимающая целое число или использующая значение по умолчанию о. Единственный элемент класса — целое data. Класс INT определяет две дружественные функции: operator+ и operator«. Ключевое слово friend перед объявлением функции означает, что функция имеет доступ к защищенным данным и функциям класса. Операции сложения и потокового вывода не являются элементами данного класса.

Совет

Совершенно не требуется определять тривиальные операции для основных типов данных. Класс INT специально упрощен, чтобы можно было сосредоточиться на вопросах перегрузки функций. C++ и так "знает", как использовать в операциях базовые типы данных.

В строках 14—18 определена глобальная операция operator+ и ее поведение по отношению к объектам класса INT. Операция сложения — бинарная,