next up previous contents
Elõre: C++ I/O könyvtárak Fel: További flexibilitás a C++-ban Vissza: Rokonok és barátok

Operator overloading

A C++-nak van egy speciális tulajdonsága, amellyel kevés más nyelv rendelkezik. Nevezetesen az, hogy a nyelv által definiált, létezõ operátorokhoz újabb jelentést rendelhetünk. Ez hasznos lehet abból a célból, hogy valamilyen osztályként definiált új adatstruktúrán is elvégeztethessük azt a mûveletet, amit az illetõ operátortól megszoktunk az elemi típusok esetében. Ha például definiálunk egy halmazok reprezentációjára szolgáló típust, akkor nagyon kellemes, ha a + operátorral halmazok unióját, a * operátorral pedig halmazok metszetét képezhetjük. Vagy ha a és b egy-egy mátrix típusú változó, akkor jó lenne, ha az a * b kifejezés szintén mátrix típusú eredményt, nevezetesen a két mátrix szorzatát szolgáltatná.

A polimorfizmus tárgyalásakor már utaltunk arra, hogy egy adott mûvelet végrehajtását jelentõ szimbólumhoz többféle jelentést rendelhetünk olyan értelemben, hogy azt a bizonyos mûveletet több, különbözõ típusú adaton is végre szeretnénk hajtani - ezt neveztük overloading-nak. Gondoljunk bele, hogy az overloading nem egészen C++ tulajdonság, hiszen a hagyományos C-beli operátorok is képesek különbözõ adattípusokon is ugyanazt a mûveletet végrehajtani. Erre egy igen kézenfekvõ példa az értékadás operátora (amelyik mind különbözõ sorszámozott típusú adatokon, mind pedig lebegõpontos számokon értelmezett mûvelet), vagy gondoljunk az egyes aritmetikai operátorokra, amelyek a hagyományos C különbözõ elemi típusain nagyjából egyformán mûködnek.

Az operátor-overloading lehetõségét a C++ kiterjeszti úgy, hogy az egyes operátorokhoz a felhasználó is megadhat újabb értelmezést egy ún. operátor függvény segítségével. Ez úgy lehetséges, hogy az operator kulcsszót követõen írjuk azt az operátor-szimbólumot, amelyikhez az újabb jelentést szeretnénk rendelni. Így például az operator+ annak a függvénynek lesz az azonosítója, amelyikkel a + operátorhoz rendelünk egy újabb jelentést. Nézzünk erre egy példát!