Перегрузка оператора << для собственных классов

Потоки ввода используют оператор вставки (<<) для стандартных типов. Оператор << для собственных классов можно перегрузить.

Пример

Пример функции write показывает использование структуры Date. Даты хорошо подходят для класса C++, в котором члены данных (месяц, день и год) скрыты от просмотра. Поток вывода является логическим местом назначения для отображения такой структуры. Этот код отображает дату с помощью объекта cout:

Date dt(1, 2, 92);

cout <<dt;

Чтобы cout принимал объект Date после оператора вставки, перегрузите оператор вставки для распознавания объектов 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;
}
5/6/92

Замечания

Перегруженный оператор возвращает ссылку на исходный объект ostream, то есть вставки можно объединить:

cout <<"The date is" <<dt <<flush;

См. также

Потоки вывода