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!