|
||||
|
8.2.2 Вывод Определяемых Пользователем Типов Рассмотрим определяемый пользователем тип: class complex (* double re, im; public: complex(double r = 0, double i = 0) (* re=r; im=i; *) friend double real(complex amp; a) (* returna.re; *) friend double real(complex amp; a) (* returna.re; *) friend complex operator+(complex, complex); friend complex operator-(complex, complex); friend complex operator*(complex, complex); friend complex operator/(complex, complex); // ... *); Операцию «« для нового типа complex можно определить так: ostream amp; operator««(ostream amp;s, complex z) (* return s «« "(" «« real(z) «« "," «« imag(z) «« ")"; *) и использовать точно так же, как для встроенного типа: complex x(1,2); // ... cout «„ "x = " «« x «« «\n“; получая при этом x = (1,2) Определение действия вывода для определяемого пользовтелем типа не требует ни модификации описания класса ostream, ни доступа к структуре данных (скрытой), которую этот класс поддерживает. Очень удачно, что имеет место первое, потому что описание класса ostream находится в стандартных заголвочных файлах, к которым у обычного пользователя нет доступа на запись. Последнее также важно, потому что обеспечивает зщиту от случайной порчи структуры данных. Это также позволяет менять реализацию ostream не влияя на пользовательские прораммы. |
|
||