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.