C++-ban a struktúrák önálló típusokat hoznak létre, amelyekkel a legalapvetőbb műveleteket el lehet végezni: deklaráció (létrehozás), értékadás, paraméterként átadás. Újabb műveleteket függvények segítségével lehet készíteni (mint pl. a fiatalabb függvény). Lehetőség van azonban arra is, hogy az operátorok jelentését is megadjuk a saját típusainkra, például
Hallgato hallg; beolvas(f, hallg);helyett írhatjuk azt is, hogy
Hallgato hallg; f >> hallg;
C++-ban az operátorok speciális függvények, amelyek működését a túlterhelés segítségével minden típusra külön meg lehet adni. Például egy komplex számot leíró típusra az összeadás operátor:
struct Komplex { double real, imag; } Komplex operator + (Komplex bal, Komplex jobb) { Komplex eredm; eredm.real = bal.real + jobb.real; eredm.imag = bal.imag + jobb.imag; return eredm; }
Vegyük észre, hogy teljesen ugyanolyan, mintha egy osszead nevű függvényt írtunk volna, csak a neve speciális: operator +.
Ezek az operátorok azért speciálisak, mert lehetőséget nyújtanak arra, hogy több adat beolvasását ill. kiírását is megadhassuk egy utasítással, például:
cin >> ev >> ho >> nap;Ez úgy működik, hogy három függvényhívás történik: az első az ev, a második a ho, a harmadik a nap változóba olvas be egy számot. Mindhárom függvényhíváshoz két paraméterre van szükség: az input streamre (itt a cin), valamint a célváltozóra.
A fenti kifejezés így írható le függvény alakban:
operator >> (operator >> (operator >>(cin, ev), ho), nap);Mivel mindhárom esetben az első paraméternek a cin-nek kell lennie, ezt csak úgy lehet megoldani, ha ezek az operátorok eredményént magát a cin-t adják vissza, tehát ilyen alakú a kódjuk:
istream& operator >> (istream& inp, int& sz) { // szám beolvasása inp-ről, eltárolása sz-be return inp; }A függvény tehát ugyanazzal a változóval tér vissza, mint ami az első paramétere. Fontos, hogy referencia típusú paramétere és visszatérési értéke van!
A kiírás ugyanígy működik a másik operátorral (<<) és az ostream& típussal.