A C ++ operátor túlterhelése példákkal

Tartalomjegyzék:

Anonim

Mi az üzemeltető túlterhelése?

A C ++ operátor túlterhelésének használatával egy operátor számára egynél több jelentést adhat meg egy hatókörben. Az operátor túlterhelésének célja az operátor speciális jelentésének megadása a felhasználó által definiált adattípus esetében.

Az operátorok túlterhelésével újradefiniálhatja a C ++ operátorok többségét. Az operátor túlterhelésével különböző műveleteket is elvégezhet egy operátor segítségével.

Ebben a C ++ oktatóanyagban megtudhatja:

  • Mi az üzemeltető túlterhelése?
  • Szintaxis
  • A kezelő túlterhelésének különböző megközelítései C ++ nyelven
  • Túlterhelhető-e az összes C ++ operátor?
  • Dolgok, amikre emlékezni kell:
  • A kezelő túlterhelésének szabályai:
  • Az üzemeltető túlterhelése:

Szintaxis

A C ++ operátor túlterheléséhez meg kell határoznia egy speciális funkciót az osztályon belül az alábbiak szerint:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Itt van egy magyarázat a fenti szintaxisra:

  • A return_type a függvény visszatérési típusa.
  • Ezután megemlíti az operátor kulcsszavát.
  • A szimbólum a túlterhelt operátor szimbólumot jelöli. Például +, -, <, ++.
  • Az argumentum (ok) átadhatók az operátor függvénynek ugyanúgy, mint a függvények.

1. példa:

#include 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;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Az iostream fejlécfájl beépítése a kódunkba funkcióinak használatához.
  2. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy TestClass nevű osztályt.
  4. 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.
  5. Hozzon létre egy egész változószámot. Ez a változó magántulajdonban lesz.
  6. 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.
  7. Egy osztály konstruktorral inicializálja a változó számlálót 5-re.
  8. Túlterhelje a - operátor jelentését.
  9. Az operátor 1-gyel csökkenti az x változó értékét.
  10. A kezelő túlterhelés szakaszának vége. Az üzemeltető új nevet kapott.
  11. A Display () függvény nevű függvény meghatározása.
  12. A Display () függvény meghívásakor nyomtassa ki a változószám értékét a konzol egyéb szövegei mellé. A} a Display () függvény törzsének a végét jelöli.
  13. Az osztálytest vége.
  14. Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
  15. Hozzon létre egy példányt a TestClass osztályból, és adja meg a tc nevet.
  16. Ez meghívja a void operator - () függvényt.
  17. Használja a TestClass Class álláspontját a Display () függvény meghívásához.
  18. A függvénynek sikeres teljesítéskor vissza kell adnia az értéket.
  19. A main () függvény törzsének vége.

A kezelő túlterhelésének különböző megközelítései C ++ nyelven

A kezelő túlterhelését a következő típusú funkciók bármelyikének végrehajtásával hajthatja végre:

  1. Tag funkció
  2. Tagságon kívüli funkció
  3. Barát funkció
  • Az operátor túlterhelési funkció tagfüggvény lehet, ha a bal operandus az osztály objektuma.
  • Ha a bal operandus eltér, az Operátor túlterhelés funkciónak nem tagfüggvénynek kell lennie.

Az operátortúlterhelési funkciót barátnévvé teheti, ha hozzá kell férnie a privát és védett osztálytagokhoz.

Túlterhelhető-e az összes C ++ operátor?

Nem. Vannak C ++ operátorok, amelyeket nem lehet túlterhelni.

Tartalmazzák:

  • :: -Scope felbontás operátor
  • ?: -ügyintéző.
  • . -tagválasztó
  • Operátor mérete
  • * -tag mutatóválasztó

Dolgok, amikre emlékezni kell:

  1. Az operátor túlterhelésével újradefiniálhatja az operátor működését csak a felhasználó által definiált típusok (objektumok, struktúrák) esetében. Nem használható beépített típusokhoz (float, char, int stb.).
  2. Az = és a & C ++ operátorok alapértelmezés szerint túlterheltek. Például ugyanazon osztály objektumait közvetlenül az = operátor segítségével másolhatja.
  3. Az operátor elsőbbsége nem változtatja meg az operátorok asszociativitását és elsőbbségét. A zárójelek segítségével azonban megváltoztathatja az értékelés sorrendjét.
  4. Négy operátor létezik, amelyeket nem lehet túlterhelni a C ++ verzióban. Ide tartoznak a hatókör-felbontás operátor (: :), a tagválasztás operátora (.), A tagválasztás egy mutatón keresztül a függvény operátorig (. *) És a ternár operátor (? :).

A kezelő túlterhelésének szabályai:

Az üzemeltető túlterhelésének szabályai:

  • Működéséhez legalább egy operandusnak egy felhasználó által definiált osztályobjektumnak kell lennie.
  • Csak túlterhelheti a meglévő operátorokat. Nem lehet túlterhelni az új operátorokat.
  • Egyes operátorokat nem lehet túlterhelni egy barát funkcióval. Az ilyen operátorok azonban túlterhelhetők a tagfüggvény használatával.

Az üzemeltető túlterhelése:

1. példa:

#include 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;}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Az iostream fejlécfájl beépítése a kódunkba funkcióinak használatához.
  2. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy OperatorOverload nevű osztályt.
  4. 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.
  5. Hozzon létre egy x egész változót. Ez a változó magántulajdonban lesz.
  6. 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.
  7. Használjon osztály konstruktort az x változó inicializálására 10-re.
  8. Túlterhelje a ++ operátor jelentését.
  9. Az operátor 2-vel növeli az x változó értékét.
  10. A kezelő túlterhelés szakaszának vége. Az üzemeltető új nevet kapott.
  11. A Print () funkció meghívása.
  12. Nyomtassa ki az x változó értékét a konzol többi szövegével együtt, amikor a Print () függvény meghívásra kerül.
  13. A Print () függvény törzsének vége.
  14. Az osztálytest vége.
  15. Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
  16. Hozzon létre egy ov nevű OperatorOverload Class példányt.
  17. Ez meghívja a void operator ++ () függvényt.
  18. Az OperatorOverload osztály álláspontjával hívja meg a Print () függvényt.
  19. A függvénynek sikeres teljesítéskor vissza kell adnia az értéket.
  20. A main () függvény törzsének vége.

2. példa:

#includeusing 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();}

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Az iostream fejlécfájl beépítése a programunkba annak funkcióinak használata érdekében.
  2. Vegyük be az std névteret programunkba annak érdekében, hogy az osztályait hívás nélkül használhassuk.
  3. Hozzon létre egy TestClass nevű osztályt. A {az osztálytest kezdetét jelöli.
  4. Használja a privát hozzáférés módosítóját a változók privátként való megjelölésére, vagyis csak az osztályon belül érhetők el.
  5. Határozzon meg két egész számot, valós és több.
  6. A nyilvános hozzáférés módosítójával jelölje meg a kivitelezőt nyilvánosként, vagyis még az osztályon kívül is elérhető lesz.
  7. Az osztályszerkesztő létrehozása és a változók inicializálása.
  8. Inicializálja a valós változó értékét.
  9. Inicializálja a változó értékét.
  10. A konstruktortest vége.
  11. Felülírja a + operátor jelentését.
  12. Hozza létre a TestClass típusú adattípus eredményt.
  13. Használja a + operátort összetett számokkal. Ez a sor hozzáadja a szám valós részét egy másik szám valós részéhez.
  14. Használja a + operátort összetett számokkal. Ez a vonal hozzáadja a szám képzeletbeli részét egy másik szám képzeletbeli részéhez.
  15. A program a sikeres végrehajtás után visszaadja a változó eredményét.
  16. A + operátor új jelentésének, vagyis a túlterhelés definíciójának vége.
  17. Hívja meg a print () metódust.
  18. A konzolra történő hozzáadás után nyomtassa ki az új komplex számot.
  19. A törzs () funkció vége.
  20. A TestClass osztály törzsének vége.
  21. A main () függvény meghívása.
  22. A hozzáadandó valós és összetett részek értékeinek átadása. A c1 első része hozzáadódik a c2 első részéhez, vagyis 9 + 4. A c1 második része hozzáadódik a c második részéhez, vagyis 5 + 3.
  23. 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.
  24. A c3 változó értékének kinyomtatása a konzolra.
  25. A fő () függvény törzsének vége.

Összegzés:

  • Egy C ++ operátor számára egynél több jelentést adhat meg egy hatókörben.
  • Ezt hívjuk operátor túlterhelésnek.
  • Az operátor túlterhelése az operátor speciális jelentését adja a felhasználó által definiált adattípushoz.
  • A C ++ operátorok többségét újra meghatározhatja az operátor túlterhelésével.
  • Nem minden C ++ operátort lehet túlterhelni.
  • Az operátor túlterheléséhez legalább az egyik operandusnak egy felhasználó által definiált objektumnak kell lennie.
  • Csak a meglévő operátorokat lehet túlterhelni. Nem lehet túlterhelni az új operátorokat.