C++ Operator Túlterhelés példákkal

⚡ Okos összefoglaló

Operator túlterhelés C++ lehetővé teszi a beépített operátorok, mint például a + és az ==, saját osztályokkal és objektumokkal való működésének újradefiniálását. Itt megismerheted a szintaxist, a megközelítéseket, hogy mely operátorok terhelhetők túl, és a követendő szabályokat.

  • Ami: OperaA tor túlterhelés újradefiniálja az olyan operátorokat, mint a + a saját osztályaidhoz.
  • ✍️ Syntax: Definiáljon egy operátor nevű függvényt, amelyet a szimbólum követ, például operator+.
  • 🔀 Megközelít: Az operátorokat tagfüggvényként vagy barátfüggvényként is túlterhelheted.
  • ???? Követelmények: Néhány operátor, mint például a ::, . és ?:, nem terhelhető túl.
  • 🤖 MI segítség: Az olyan mesterséges intelligencia eszközök, mint a GitHub Copilot, azonnal írják az operátor túlterhelési függvényeket.

C++ Operator Túlterhelés

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

Code Magyarázat:

  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

Code Magyarázat:

  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

Code Magyarázat:

  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.

GYIK

OperaA tor túlterhelés lehetővé teszi a beépített operátorok, például a + vagy az == karakterek saját osztályok objektumaival való működésének újradefiniálását, így azok természetesen viselkednek egyéni adattípusok esetén.

Definiálj egy speciális függvényt, amelynek a neve az operátor kulcsszó, majd a szimbólum, például operator+. A függvény paraméterként fogadja az operandusokat, és visszaadja az eredményt.

Két fő megközelítés létezik: egy operátor túlterhelése az osztály tagfüggvényeként, vagy egy olyan barátfüggvényként, amely hozzáférhet az osztály privát tagjaihoz.

A legtöbb operátor túlterhelhető, de néhány nem, beleértve a hatókör-feloldást (::), a taghozzáférést (.), a tagmutatót (.*) és a háromkomponensű (?:) operátorokat.

Csak meglévő operátorokat terhelhetsz túl, legalább egy operandusnak felhasználó által definiált típusnak kell lennie, és nem módosíthatod egy operátor precedenciáját, asszociativitását vagy operandusainak számát.

Az olyan mesterséges intelligencia asszisztensek, mint a GitHub Copilot, operátor túlterhelési függvényeket generálnak az osztályaidhoz, választanak a tag és a barát függvények között, és gépelés közben hozzáadják a megfelelő visszatérési típusokat.

Igen. A mesterséges intelligencia által vezérelt eszközök túlterhelt operátorokat, például + és == jeleket generálnak, követik a standard szabályokat, és megjelölik azokat az operátorokat, amelyeket nem lehet túlterhelni, így időt és hibákat takarítanak meg.

OperaA tor túlterhelés megkönnyíti az osztályok használatát és olvasását azáltal, hogy lehetővé teszi az objektumok számára, hogy ismerős operátorokkal dolgozzanak, például két vektort + jellel összeadjanak egy elnevezett függvény helyett.

Foglald össze ezt a bejegyzést a következőképpen: