C++ Operator Túlterhelés példákkal
Mi a Operator Túlterhelés?
<p></p> kezelő túlterhelése in C++, egynél több jelentést is megadhat egy operátorhoz egy hatókörben. Az operátor túlterhelésének célja, hogy a felhasználó által definiált adattípushoz az operátor speciális jelentését adja.
A kezelői túlterhelés segítségével újradefiniálhatja a legtöbb C++ operátorok. A kezelői túlterhelést is használhatja különböző műveletek végrehajtására egy operátor használatával.
Szintaxis
Túlterheléshez a C++ operátort, meg kell határoznia egy speciális függvényt az osztályon belül a következőképpen:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Íme a fenti szintaxis magyarázata:
- A return_type a függvény visszatérési típusa.
- Ezután megemlíti az operátor kulcsszót.
- A szimbólum a túlterhelt kezelő szimbólumot jelöli. Például +, -, <, ++.
- Az argumentum(ok) ugyanúgy átadhatók az operátorfüggvénynek, mint a függvények.
Példa 1
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy TestClass nevű osztályt.
- Használja a privát hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Hozzon létre egy egész változók számát. Ez a változó privát módon lesz elérhető.
- Használja a nyilvános hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Használjon osztálykonstruktort a változószámláló inicializálásához 5-re.
- Túlterhelje a — operátor jelentését.
- Az operátor 1-gyel csökkenti az x változó értékét.
- A kezelő túlterhelési szakaszának vége. Az üzemeltető új nevet kapott.
- A Display() függvény nevű függvény meghatározása.
- A Display() függvény meghívásakor nyomtassa ki a count változó értékét más szövegek mellé a konzolon. A } a Display() függvény törzsének végét jelöli.
- Az osztálytörzs vége.
- Hívja meg a main() függvényt. A program logikáját hozzá kell adni ebben a függvényben.
- Hozzon létre egy példányt a TestClass osztályból, és adja meg a tc nevet.
- Ez meghívja a void operátor –() függvényt.
- A Display() függvény meghívásához használja a TestClass Class álláspontját.
- A függvénynek értéket kell visszaadnia a sikeres befejezés után.
- A main() függvény törzsének vége.
Különböző megközelítések Operator Túlterhelés be C++
A kezelő túlterhelését a következő típusú funkciók bármelyikének megvalósításával hajthatja végre:
- Tagi funkció
- Nem tag funkció
- Barát funkció
- Az operátortúlterhelési függvény tagfüggvény lehet, ha egy bal oldali operandus az osztály objektuma.
- Ha a bal oldali operandus eltérő, a Operator overloading függvénynek nem tagfüggvénynek kell lennie.
Az operátor túlterhelés funkciót barát funkcióvá teheti, ha hozzá kell férnie a privát és védett osztálytagokhoz.
Lehet mind C++ Operatúlterheltek?
Nem. Vannak C++ operátorok, amelyeket nem lehet túlterhelni.
Ezek közé tartozik:
- :: -Scope felbontás operátor
- ?: -háromtagú operátor.
- . -tag választó
- Operátor mérete
- * -tag mutató választó
Things to Remember
- Az operátor túlterhelése esetén csak a felhasználó által definiált típusokhoz (objektumok, struktúrák) definiálhatja újra az operátor működését. Nem használható beépített típusokhoz (float, char, int stb.).
- A = és & C++ az operátorok alapértelmezés szerint túlterheltek. Például ugyanazon osztály objektumai közvetlenül másolhatók az = operátor használatával.
- OperaA tor precedenciája nem változtatja meg az operátorok asszociatív és elsőbbségét. A kiértékelés sorrendjét azonban zárójelek használatával módosíthatja.
- Négy operátor van, amelyeket nem lehet túlterhelni C++. Ezek közé tartozik a hatókör felbontási operátora (::), a tagkiválasztás operátora (.), a tagkiválasztás funkció operátorra mutató mutatón keresztül (.*) és a háromtagú operátor (?:).
szabályai Operator Túlterhelés
Itt vannak a szabályok Operator Túlterhelés:
- Ahhoz, hogy működjön, legalább egy operandusnak felhasználó által meghatározott osztályobjektumnak kell lennie.
- Csak a meglévő operátorokat terhelheti túl. Nem terhelheti túl az új operátorokat.
- Egyes operátorokat nem lehet túlterhelni barát funkcióval. Az ilyen operátorok azonban túlterhelhetők a tagfüggvény használatával.
Hogyan lehet túlterhelni Operator
Példa 1
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x = x + 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
- Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy osztályt nevű OperatorTúlterhelés.
- Használja a privát hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Hozzon létre egy x egész változót. Ez a változó privát módon lesz elérhető.
- Használja a nyilvános hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Osztálykonstruktorral inicializálja az x változót 10-re.
- A ++ operátor jelentésének túlterhelése.
- Az operátor 2-vel növeli az x változó értékét.
- A kezelő túlterhelési szakaszának vége. Az üzemeltető új nevet kapott.
- A Print() függvény meghívása.
- Nyomtassa ki az x változó értékét más szövegek mellé a konzolon, amikor a Print() függvény meghívódik.
- A Print() függvény törzsének vége.
- Az osztálytörzs vége.
- Hívja meg a main() függvényt. A program logikáját hozzá kell adni ebben a függvényben.
- Hozzon létre egy példányt a OperatorOverload ov nevű osztály.
- Ez meghívja a void operátor ++() függvényt.
- Használja az álláspontját OperatorOverload osztályt a Print() függvény meghívásához.
- A függvénynek értéket kell visszaadnia a sikeres befejezés után.
- A main() függvény törzsének vége.
Példa 2
#include<iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) { real = rl; over = ov; } TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
output:
Itt van egy képernyőkép a kódról:
Kód magyarázata:
- Az iostream fejlécfájl beillesztése a programunkba, annak funkcióinak használatához.
- Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy TestClass nevű osztályt. A { az osztálytörzs kezdetét jelöli.
- Használja a privát hozzáférés módosítót a változók privátként való megjelölésére, ami azt jelenti, hogy csak az osztályon belülről lehet hozzáférni.
- Határozzon meg két egész változót, valós és over.
- A nyilvános hozzáférés módosító segítségével jelölje meg a konstruktort nyilvánosként, ami azt jelenti, hogy az osztályon kívül is elérhető lesz.
- Az osztálykonstruktor létrehozása és a változók.
- Inicializálja a real változó értékét.
- Inicializálja a változó értékét over.
- A kivitelező test vége.
- A + operátor jelentésének felülírása.
- Hozza létre a TestClass típusú adattípus eredményét.
- Komplex számokhoz használja a + operátort. Ez a sor hozzáadja egy szám valós részét egy másik szám valós részéhez.
- Komplex számokhoz használja a + operátort. Ez a sor hozzáadja egy szám képzeletbeli részét egy másik szám képzeletbeli részéhez.
- A program sikeres végrehajtás után visszaadja az eredmény változó értékét.
- Vége a + operátor új jelentésének definíciójának, vagyis a túlterhelésnek.
- Hívja meg a print() metódust.
- Nyomtassa ki az új komplex számot, miután hozzáadta a konzolon.
- A print() függvény törzsének vége.
- A TestClass osztály törzsének vége.
- A main() függvény meghívása.
- Mind a valós, mind az összetett részek értékeinek átadása összeadandó. A c1 első része hozzáadódik a c2 első részéhez, azaz a 9+4. A c1 második része hozzáadódik c második részéhez, azaz 5+3.
- Művelet végrehajtása a túlterhelt + operátor használatával és az eredmény tárolása a c3 változóban.
- A c3 változó értékének kinyomtatása a konzolon.
- A main() függvény törzsének vége.
Összegzésként
- Egynél több jelentést is megadhat a-nak C++ operátor egy terjedelemben.
- Ezt hívják kezelői túlterhelésnek.
- OperaA tor overloading egy operátor speciális jelentését adja a felhasználó által meghatározott adattípushoz.
- A legtöbbet újradefiniálhatja C++ operátorok túlterhelése révén.
- Nem mind C++ a kezelők túlterhelhetők.
- Ahhoz, hogy egy operátor túlterhelt legyen, legalább az egyik operandusnak felhasználó által meghatározott objektumnak kell lennie.
- Csak a meglévő kezelőket lehet túlterhelni. Nem terhelheti túl az új operátorokat.