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:

Operator Túlterhelés

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

Operator Túlterhelés

Kód magyarázata:

  1. Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a 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ók számát. Ez a változó privát módon lesz elérhető.
  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álykonstruktort a változószámláló inicializálásához 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ési 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 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.
  13. Az osztálytörzs vége.
  14. Hívja meg a main() függvényt. A program logikáját hozzá kell adni ebben a függvényben.
  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 operátor –() függvényt.
  17. A Display() függvény meghívásához használja a TestClass Class álláspontját.
  18. A függvénynek értéket kell visszaadnia a sikeres befejezés után.
  19. 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:

  1. Tagi funkció
  2. Nem tag funkció
  3. 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

  1. 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.).
  2. 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.
  3. 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.
  4. 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:

Túlterhelés Operator Példa

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

Túlterhelés Operator Példa

Kód magyarázata:

  1. Az iostream fejlécfájl belefoglalása a kódunkba a funkcióinak használatához.
  2. Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy osztályt nevű OperatorTúlterhelés.
  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ó privát módon lesz elérhető.
  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. Osztálykonstruktorral inicializálja az x változót 10-re.
  8. A ++ operátor jelentésének túlterhelése.
  9. Az operátor 2-vel növeli az x változó értékét.
  10. A kezelő túlterhelési szakaszának vége. Az üzemeltető új nevet kapott.
  11. A Print() függvény meghívása.
  12. 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.
  13. A Print() függvény törzsének vége.
  14. Az osztálytörzs vége.
  15. Hívja meg a main() függvényt. A program logikáját hozzá kell adni ebben a függvényben.
  16. Hozzon létre egy példányt a OperatorOverload ov nevű osztály.
  17. Ez meghívja a void operátor ++() függvényt.
  18. Használja az álláspontját OperatorOverload osztályt a Print() függvény meghívásához.
  19. A függvénynek értéket kell visszaadnia a sikeres befejezés után.
  20. 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:

Túlterhelés Operator Példa

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

Túlterhelés Operator Példa

Kód magyarázata:

  1. Az iostream fejlécfájl beillesztése a programunkba, annak funkcióinak használatához.
  2. Szerelje be az std névteret a programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hozzon létre egy TestClass nevű osztályt. A { az osztálytörzs kezdetét jelöli.
  4. 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.
  5. Határozzon meg két egész változót, valós és over.
  6. 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.
  7. Az osztálykonstruktor létrehozása és a változók.
  8. Inicializálja a real változó értékét.
  9. Inicializálja a változó értékét over.
  10. A kivitelező test vége.
  11. A + operátor jelentésének felülírása.
  12. Hozza létre a TestClass típusú adattípus eredményét.
  13. 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.
  14. 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.
  15. A program sikeres végrehajtás után visszaadja az eredmény változó értékét.
  16. Vége a + operátor új jelentésének definíciójának, vagyis a túlterhelésnek.
  17. Hívja meg a print() metódust.
  18. Nyomtassa ki az új komplex számot, miután hozzáadta a konzolon.
  19. A print() függvény törzsének vége.
  20. A TestClass osztály törzsének vége.
  21. A main() függvény meghívása.
  22. 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.
  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 konzolon.
  25. 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.