Бьерн Страуструп - Язык программирования С++. Главы 9-10
Страница 23. Вывод пользовательских типов



10.2.2 Вывод пользовательских типов

Рассмотрим пользовательский тип данных:

     class complex {
        double re, im;
     public:
        complex(double r = 0, double i = 0) { re=r; im=i; }

        friend double real(complex& a) { return a.re; }
        friend double imag(complex& a) { return a.im; }

        friend complex operator+(complex, complex);
        friend complex operator-(complex, complex);
        friend complex operator*(complex, complex);
        friend complex operator/(complex, complex);
        //...
     };

Для нового типа complex операцию << можно определить так:

    ostream& operator<<(ostream&s, complex z)
    {
     return s << '(' real(z) << ',' << imag(z) << ')';
    };

и использовать  как operator<< для встроенных типов. Например,

    main()
    {
        complex x(1,2);
        cout << "x = " << x << '\n';
    }

выдаст

    x = (1,2)

Для определения операции вывода над пользовательскими типами данных
не нужно модифицировать описание класса ostream, не требуется и доступ
к структурам данных, скрытым в описании класса. Последнее очень кстати,
поскольку описание класса ostream находится среди стандартных
заголовочных файлов, доступ по записи к которым закрыт для большинства
пользователей, и изменять которые они вряд ли захотят, даже если бы
могли. Это важно и по той причине, что дает защиту от случайной порчи
этих структур данных. Кроме того имеется возможность изменить
реализацию ostream, не затрагивая пользовательских программ.

 
« Предыдущая статья   Следующая статья »