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

В языке C++ операторы << и >> перегружены для вывода и ввода данных соответственно. Чтобы объекты пользовательского класса имели возможность взаимодействовать с потоками ввода/вывода следует перегрузить эти операторы с помощью дружественных функций. Использовать в этом случае «операторные» методы нельзя. Перегрузка оператора << осуществляется следующим образом:

std::ostream &operator<<(std::ostream &stream, <Класс> &obj) {
   // Выводим данные в поток, используя переменную stream
   return stream;                 // Возвращаем ссылку на поток
}

Перегрузка оператора >> выглядит так:

std::istream &operator>>(std::istream &stream, <Класс> &obj) {
   // Вводим данные из потока, используя переменную stream
   return stream;                 // Возвращаем ссылку на поток
}

В качестве параметров функции принимают ссылку на соответствующий поток и ссылку на объект. Внутри функции необходимо вернуть ссылку на поток, чтобы иметь возможность составлять цепочки из вызовов операторов. Пример перегрузки операторов << и >> приведен в листинге 14.10.

Листинг 14.10. Перегрузка операторов << и >>

#include <iostream>

class C {
   int x_;
public:
   int y;
   C(int a, int b) { x_ = a; y = b; }
   friend std::ostream &operator<<(std::ostream &stream, C &obj);
   friend std::istream &operator>>(std::istream &stream, C &obj);
};

std::ostream &operator<<(std::ostream &stream, C &obj) {
   stream << "Class C { x_ = " << obj.x_ << ", y = "
          << obj.y << " }";
   return stream;                    // Возвращаем ссылку на поток
}
std::istream &operator>>(std::istream &stream, C &obj) {
   std::cout << "y = ";
   std::cout.flush();
   stream >> obj.y;
   return stream;                    // Возвращаем ссылку на поток
}
int main() {
   C obj(10, 20);
   std::cin >> obj;                  // Например, ввели число 500
   std::cout << obj << std::endl;    // Результат:
                                     // Class C { x_ = 10, y = 500 }
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов