Глава 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. Операция сложения — бинарная,