Перегрузка оператора << для собственных классов
Потоки вывода используют оператор вставки (<<) для стандартных типов. Можно также перегруженный оператор << для пользовательских классов.
Пример
Пример функции write показано использование структуры Date. Дата идеальный кандидатом для класса C++, в котором элементы данных (месяц, день и год) скрыты от представления. Логический поток вывода назначение для отображения такой структуры. Этот код выводит дату с помощью объекта cout:
Date dt( 1, 2, 92 );
cout << dt;
Для получения, что cout принимать объект Date после оператора insert, оператор перегружайте вставки для распознавания объект ostream слева и Date справа. Перегруженную функцию оператора << необходимо объявить в качестве дружественной функции класса Date поэтому он может получить доступ к конфиденциальным данным в объекте Date.
// overload_date.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Date
{
int mo, da, yr;
public:
Date(int m, int d, int y)
{
mo = m; da = d; yr = y;
}
friend ostream& operator<<(ostream& os, const Date& dt);
};
ostream& operator<<(ostream& os, const Date& dt)
{
os << dt.mo << '/' << dt.da << '/' << dt.yr;
return os;
}
int main()
{
Date dt(5, 6, 92);
cout << dt;
}
Заметки
Перегруженный оператор возвращает ссылку на исходный объект ostream, что позволяет объединять вставки:
cout << "The date is" << dt << flush;