Přetěžování operátorů znamená rozšíření definice některého z existujících operátorů na nový datový typ. Jazyk C++ dovoluje přetížit velkou většinu operátorů. Přetížené operátory budou mít stejnou prioritu i ostatní vlastnosti jako stejnojmenné standardní operátory, budou ale pracovat s novým datovým typem. Přetížený operátor deklarujeme jako volnou („obyčejnou“) funkci nebo jako metodu se jménem tvořeným klíčovým slovem operátor, za kterým následuje symbol operátoru. Jestliže operátor přetížíme jako volnou funkci, musí mít alespoň jeden operand objektového nebo výčtového typu.)
//Sčítání dvou zlomků (struktur s prvky cit a jmen) Zlomek operator+(Zlomek zl1, Zlomek zl2) { Zlomek soucet; soucet.cit=((zl1.cit*zl2.jmen)+(zl1.jmen*zl2.cit)); soucet.jmen=zl1.jmen*zl2.jmen; return soucet; }
Komplexní čísla: Upravená deklarace třídy complex tedy může vypadat takto:
// Soubor COMPLEX.H class complex { public: complex(double r = 0, double i = 0); //Konstruktor complex operator+(complex& c); //Aritmetické operátory complex operator*(complex& c); complex operátor-(complex& c); complex operator/(complex& c); double Re(); //Reálná a imaginární část double Im(); double abs(); //Absolutní hodnota private: double re, im; //Datové složky };
Možná vám připadá podivné, že binární operátory +, - a další zde mají jen jeden parametr.
To je v pořádku: Zápis a+b, kde a a b jsou instance typu complex, bude překladač interpretovat jako volání metody a.operator+(b);
a podobné je to i v ostatních případech.