UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Alapvető műveletek Lehetőség van primitív értékek összeadására, kivonására, …stb. int a = 5; int b = 5; int c = a – b; De lehetőség van-e objektumok összeadására, kivonására, stb? Obj a; Obj b; Obj c = a + b;//?? A válasz igen, ha felüldefiniáljuk az adott operátort.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Operátorok fajtái Unáris Csak egy „oldala” van Pl. ++, --(következő órán részletesebben) Bináris Két „oldala” van. A bal oldala MINDIG az az objektum, melyen alkalmazni szeretnénk az adott operátort! Jobb oldali paraméter egy referencia, mellyel el akarjuk végezni a műveletet az előző objektumon.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Operátor overloading Szintaxis: Visszatérési_Tipus operátor felül_definiálandó_operátor (paraméter); Pl., ha van egy Tort osztályunk: Tort operator+( Tort& right); A +,-,*,/ stb operátoroknál új érték képződik, a régiek nem változnak, tehát egy ilyen műveletnél új objektum fog létrejönni.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Operátor példa (*) class Tort { private: int szamlalo; int nevezo; public: Tort( int sz, int n ) { szamlalo = sz; nevezo = n; } Tort operator*( Tort& other ) { return Tort( this->szamlalo * other.szamlalo, this->nevezo * other.nevezo ); } };
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Operátor használata (*) Létrehozzuk az alábbi Tort objektumokat: Tort a( 2,3 ); Tort b( 2,4 ); Használhatjuk így is az operátorokat: Tort c = a.operator*( b ); De kényelmi célokból a használat a következő: Tort c = a * b;