headerphoto

Přetížené operátory << >>

V jazyce C není možno měnit chování operátorů, ale v C++ to možné je. Operátory můžeme považovat za speciální funkce, lze je tedy i přetěžovat.

Všechny operátory mají svůj základní standardní význam a použití. Pokud chceme použít např.operátory << a >> pro standardní vstup a výstup objektů námi definované třídy, musíme je v naší třídě znovu definovat.

Vylepšíme si standardní vstup a výstup pro objekty třídy Vozidlo, budeme používat operátory << a >>. Můžeme potom používat:

  
  Vozidlo nove;
  cin >> nove;
  cout << nove;
  
 

Dále si ukážeme, jak to zařídit v definici třídy. Při deklaraci operátorů ve třídě použijeme klíčové slovo friend. Tím zpřístupníme soukromá data třídy externím funkcím a třídám. Parametrem je odpovídající datový proud a objekt třídy Vozidlo.

Parametr třídy Vozidlo předáváme jako referenci (odkazem), vyhneme se tak kopírování objektů. Navíc pro výstup uvedeme pro Vozidlo taky const, protože nechcemee, aby se hodnoty změnily.

 
   //deklarace pro pretizene operatory <<, >>, * ve třídě Vozidlo		
   friend ostream &operator<<(ostream &vystup, const Vozidlo &x);
   friend istream &operator>>(istream &vstup, Vozidlo &x);
    
 

Pro definici operátorů >> a >> pro objekty třídy Vozidlo můžeme použít následující kód:

    ostream &operator<<(ostream &vystup, const Vozidlo &x)
    {
	cout << "Informace o vozidle:"  << x.Spz << ", " << x.RokVyroby << endl;
	return vystup;
    }
    

    istream &operator>>(istream &vstup, Vozidlo &x)
    {
       cout << "Zadejte informace o vozidle :" << endl;
       cout << "   SPZ: ";
       vstup >> x.Spz;
       cout << "   Rok vyroby: ";
       vstup >> x.RokVyroby;
       return vstup;
   }
    

Při načítání informací od uživatele je vždy nutné zkontrolovat jejich správnost: jestli je správný formát SPZ, jestli je rok v určeném rozsahu ... Pro kontrolu je vhodné definovat speciální funkce, protože data budeme určitě kontrolovat vícekrát.