C++ Operator Näidetega ülekoormamine

Mis on Operakas ülekoormus?

Kasutamine operaatori ülekoormus in C++, saate ühes ulatuses määrata operaatorile rohkem kui ühe tähenduse. Operaatori ülekoormuse eesmärk on anda kasutaja määratud andmetüübile operaatori eriline tähendus.

Operaatori ülekoormamise abil saate enamiku uuesti määratleda C++ operaatorid. Operaatori ülekoormust saate kasutada ka erinevate toimingute tegemiseks ühe operaatori abil.

Süntaks

Ülekoormamiseks a C++ operaator, peaksite klassi sees defineerima spetsiaalse funktsiooni järgmiselt:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

Siin on ülaltoodud süntaksi selgitus:

  • Tagastustüüp on funktsiooni tagastamise tüüp.
  • Järgmisena mainite operaatori märksõna.
  • Sümbol tähistab operaatori sümbolit, mis on ülekoormatud. Näiteks +, -, <, ++.
  • Argumendi(d) saab operaatorifunktsioonile edastada samamoodi nagu funktsioone.

Näiteks 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;
}

Väljund:

Operator Ülekoormus

Siin on koodi ekraanipilt:

Operator Ülekoormus

Koodi selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostream päisefail.
  2. Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega TestClass.
  4. Kasutage privaatjuurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
  5. Looge täisarvuline muutujate arv. See muutuja on privaatselt juurdepääsetav.
  6. Kasutage avaliku juurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
  7. Kasutage klassikonstruktorit, et lähtestada muutuja loendur väärtuseks 5.
  8. Liigutage operaatori — tähendust.
  9. Operaator vähendab muutuja x väärtust 1 võrra.
  10. Operaatori ülekoormussektsiooni lõpp. Operaator on saanud uue nime.
  11. Funktsiooni Display()-nimelise funktsiooni määratlemine.
  12. Funktsiooni Display() kutsumisel printige muutuja count väärtus koos muu konsooli tekstiga. } tähistab funktsiooni Display() põhiosa lõppu.
  13. Klassi keha lõpp.
  14. Kutsuge välja funktsioon main(). Selle funktsiooni sisse tuleks lisada programmiloogika.
  15. Looge klassist TestClass eksemplar ja andke sellele nimi tc.
  16. See kutsub esile tühiste operaatori –() funktsiooni.
  17. Funktsiooni Display() kutsumiseks kasutage TestClass Classi seisukohta.
  18. Funktsioon peab pärast edukat lõpetamist tagastama väärtuse.
  19. Funktsiooni main() keha lõpp.

Erinevad lähenemised Operator Ülekoormus sisse C++

Operaatori ülekoormamist saate teostada, rakendades mis tahes järgmist tüüpi funktsioone:

  1. Liikme funktsioon
  2. Mitteliikme funktsioon
  3. Sõbra funktsioon
  • Operaatori ülekoormusfunktsioon võib olla liigefunktsioon, kui vasak operand on klassi objekt.
  • Kui vasak operand on erinev, siis OperaÜlekoormusfunktsioon peaks olema mitteliikmefunktsioon.

Saate muuta operaatori ülekoormusfunktsiooni sõbrafunktsiooniks, kui see vajab juurdepääsu privaatsetele ja kaitstud klassi liikmetele.

Saab kõik C++ Operators on ülekoormatud?

Ei. Neid on C++ operaatorid, mida ei saa üle koormata.

Nende hulka kuuluvad:

  • :: -Scope resolutsiooni operaator
  • ?: -kolmne operaator.
  • . -liikme valija
  • Operaatori suurus
  • * -liikme osuti valija

Asjad, mida meeles pidada

  1. Operaatori ülekoormusega saate operaatori tööviisi ümber määratleda ainult kasutaja määratud tüüpide (objektid, struktuurid) jaoks. Te ei saa seda kasutada sisseehitatud tüüpide jaoks (float, char, int jne).
  2. = ja & C++ operaatorid on vaikimisi ülekoormatud. Näiteks saate sama klassi objekte otse kopeerida, kasutades operaatorit =.
  3. Operatori ülimuslikkus ei muuda operaatorite assotsiatiivset ja prioriteetsust. Hindamise järjekorda saate aga muuta sulgudes.
  4. Seal on neli operaatorit, mida te ei saa üle koormata C++. Nende hulka kuuluvad ulatuse lahutusoperaator (::), liikmevaliku operaator (.), liikmete valik funktsioonioperaatori osuti kaudu (.*) ja kolmekomponentne operaator (?:).

Reeglid Operator Ülekoormus

Siin on reeglid Operator ülekoormamine:

  • Et see toimiks, peab vähemalt üks operaand olema kasutaja määratud klassiobjekt.
  • Saate ainult olemasolevaid operaatoreid üle koormata. Te ei saa uusi operaatoreid üle koormata.
  • Mõnda operaatorit ei saa sõbrafunktsiooni kasutades üle koormata. Selliseid operaatoreid saab liikmefunktsiooni kasutades aga üle koormata.

Kuidas üle koormata Operator

Näiteks 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;
}

Väljund:

Ülekoormus Operator Näide

Siin on koodi ekraanipilt:

Ülekoormus Operator Näide

Koodi selgitus:

  1. Selle funktsioonide kasutamiseks lisage meie koodi iostream päisefail.
  2. Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega OperatOverload.
  4. Kasutage privaatjuurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
  5. Looge täisarvuline muutuja x. See muutuja on privaatselt juurdepääsetav.
  6. Kasutage avaliku juurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
  7. Muutuja x lähtestamiseks 10-ks kasutage klassikonstruktorit.
  8. Liigutage operaatori ++ tähendust.
  9. Operaator suurendab muutuja x väärtust 2-ga.
  10. Operaatori ülekoormussektsiooni lõpp. Operaator on saanud uue nime.
  11. Funktsiooni Print() kutsumine.
  12. Funktsiooni Print() kutsumisel printige muutuja x väärtus koos muu konsooli tekstiga.
  13. Funktsiooni Print() keha lõpp.
  14. Klassi keha lõpp.
  15. Kutsuge välja funktsioon main(). Selle funktsiooni sisse tuleks lisada programmiloogika.
  16. Loo eksemplar OperatorOverload Klass nimega ov.
  17. See kutsub esile tühiste operaatori ++() funktsiooni.
  18. Kasutage seisukohta OperatorOverload klassi funktsiooni Print() kutsumiseks.
  19. Funktsioon peab pärast edukat lõpetamist tagastama väärtuse.
  20. Funktsiooni main() keha lõpp.

Näiteks 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();
}

Väljund:

Ülekoormus Operator Näide

Siin on koodi ekraanipilt:

Ülekoormus Operator Näide

Koodi selgitus:

  1. Iostreami päisefaili lisamine meie programmi selle funktsioonide kasutamiseks.
  2. Kaasake std nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega TestClass. { tähistab klassi keha algust.
  4. Kasutage privaatse juurdepääsu modifikaatorit muutujate privaatseks märkimiseks, mis tähendab, et neile pääseb juurde ainult klassi seest.
  5. Määratlege kaks täisarvu muutujat, reaalne ja üle.
  6. Kasutage avaliku juurdepääsu muutjat, et märkida konstruktor avalikuks, mis tähendab, et see on juurdepääsetav isegi väljaspool klassi.
  7. Klassi konstruktori loomine ja lähtestamine muutujad.
  8. Initsialiseerige muutuja real väärtus.
  9. Initsialiseerige muutuja väärtus over.
  10. Konstruktori korpuse lõpp.
  11. Alistage operaatori + tähendus.
  12. Looge andmetüübi tulemus tüübiga TestClass.
  13. Kasutage kompleksarvude puhul operaatorit +. See rida lisab arvu reaalosa teise arvu reaalosale.
  14. Kasutage kompleksarvude puhul operaatorit +. See rida lisab arvu mõttelise osa teise arvu imaginaarsele osale.
  15. Programm tagastab edukal täitmisel muutuja tulemuse väärtuse.
  16. Operaatori + uue tähenduse ehk ülekoormamise definitsiooni lõpp.
  17. Kutsuge print() meetodit.
  18. Printige uus kompleksarv pärast lisamist konsoolil.
  19. Funktsiooni print() kehaosa lõpp.
  20. TestClassi klassi põhiosa lõpp.
  21. Funktsiooni main() kutsumine.
  22. Nii reaal- kui ka kompleksosa väärtuste läbimine, mida lisada. C1 esimene osa lisatakse c2 esimesele osale, see tähendab 9+4. C1 teine ​​osa lisatakse c teisele osale, see tähendab 5+3.
  23. Tehte sooritamine operaatoriga overloaded + ja tulemuse salvestamine muutujasse c3.
  24. Muutuja c3 väärtuse trükkimine konsoolile.
  25. Funktsiooni main() keha lõpp.

kokkuvõte

  • Saate määrata a jaoks rohkem kui ühe tähenduse C++ operaator ühes ulatuses.
  • Seda nimetatakse operaatori ülekoormamiseks.
  • Operator overloading annab kasutaja määratud andmetüübi puhul operaatori erilise tähenduse.
  • Saate enamuse uuesti määratleda C++ operaatorid operaatori ülekoormuse tõttu.
  • Mitte kõik C++ operaatorid võivad olla ülekoormatud.
  • Operaatori ülekoormamiseks peab vähemalt üks operandidest olema kasutaja määratud objekt.
  • Ülekoormatud võivad olla ainult olemasolevad operaatorid. Te ei saa uusi operaatoreid üle koormata.