Преклапање оператора за улаз и излаз података

Стандардни улазно/излазни токови

У C++ се користи стандардна библиотека чије се декларације налазе у заглављу. Библиотека садржи две основне класе, istream и ostream (улазни и излазни ток). У библиотеци iostream дефинисана су и два кориснику доступна (глобална) статичка објекта:
1. објекат cin класе istream који је придружен стандардном улазном уређају (обично тастатура);
2. објекат cout класе ostream који је придружен стандардном излазном уређају (обично екран).
Класа istream је преклопила оператор >> за све уграђене типове, који служи за улаз података:

istream& operator>> (istream &ut, T &t);

где је T неки уграђени тип објекта који се чита, ut – улазни ток из ког се читају подаци

Класа ostream је преклопила оператор << за све уграђене типове, који служи за излаз података:

ostream& operator<< (ostream &it, T x);

где је T неки уграђени тип објекта који се исписује, it – излазни ток у који се уписују подаци.

Вредност обе функције (operator>>, operator<<) је упућивач на улазни, односно излазни ток, чиме се омогућава низање ових оператора, односно вишеструки улаз/излаз у истој наредби. Ови оператори се групишу слева надесно, тако да се подаци читају, односно пишу у природном редоследу.

Улазно/излазне операције за корисничке типове

Корисник може да дефинише значења оператора >> и << за своје типове. То се ради дефинисањем пријатељских функција корисникове класе. Разлог: први операнд је типа istream& односно ostream&, па оператор не може бити чланица корисничке класе. На овај начин се обезбеђује да се подаци класних типова читају и пишу на исти начин као што се читају и пишу и подаци стандардних типова.


Пример

За класу комплексних бројева врши се преклапање оператора << и даје се илустрација примене овог преклапања:

#include <iostream>
 using namespace std;
 class Kompl
 {
      float re, im;
      friend ostream & operator<< (ostream &dat, const Kompl &z)
      { return dat << "(" << z.re << "," << z.im << ")" ; }
 public:
      Kompl (float r=0, float i=0) {re=r;im=i;}
 };
 main()
 {
      Kompl z(1,1);
      cout << "z = " << z << endl;
 }

Делови текста преузети са: Preklapanje operatora

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s