Перегрузка оператора <<
для собственных классов
Потоки ввода используют оператор вставки (<<
) для стандартных типов. Оператор <<
для собственных классов можно перегрузить.
Пример
Пример функции 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;