Перегрузка оператора << для собственных классовOverloading the << Operator for Your Own Classes

Потоки ввода используют оператор вставки (<<) для стандартных типов.Output streams use the insertion (<<) operator for standard types. Оператор << для собственных классов можно перегрузить.You can also overload the << operator for your own classes.

ПримерExample

Пример функции write показывает использование структуры Date.The write function example showed the use of a Date structure. Даты хорошо подходят для класса C++, в котором члены данных (месяц, день и год) скрыты от просмотра.A date is an ideal candidate for a C++ class in which the data members (month, day, and year) are hidden from view. Поток вывода является логическим местом назначения для отображения такой структуры.An output stream is the logical destination for displaying such a structure. Этот код отображает дату с помощью объекта cout:This code displays a date using the cout object:

Date dt(1, 2, 92);

cout <<dt;

Чтобы cout принимал объект Date после оператора вставки, перегрузите оператор вставки для распознавания объектов ostream слева и Date справа.To get cout to accept a Date object after the insertion operator, overload the insertion operator to recognize an ostream object on the left and a Date on the right. Перегруженная функция оператора << затем должна быть объявлена как друг класса Date, он может получить доступ к личных данных в пределах Date объекта.The overloaded << operator function must then be declared as a friend of class Date so it can access the private data within a Date object.

// 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

ПримечанияRemarks

Перегруженный оператор возвращает ссылку на исходный объект ostream, то есть вставки можно объединить:The overloaded operator returns a reference to the original ostream object, which means you can combine insertions:

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

См. такжеSee also

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