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, не затрагивая пользовательских программ.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.