C++ Operator Ylikuormitus esimerkeillä

⚡ Älykäs yhteenveto

Operator ylikuormitus C++ antaa sinun määritellä uudelleen, miten sisäänrakennetut operaattorit, kuten + ja ==, toimivat omien luokkiesi ja olioidesi kanssa. Tässä opit sen syntaksin, lähestymistavat, mitkä operaattorit voidaan ylikuormittaa ja mitä sääntöjä on noudatettava.

  • Mitä se on: Operator-ylikuormitus määrittelee operaattorit, kuten +, uudelleen omille luokillesi.
  • 🇧🇷 Syntaksi: Määrittele funktio nimeltä operaattori ja sen perässä oleva symboli, kuten operaattori+.
  • 🔀 Lähestymistavat: Voit ylikuormittaa operaattoreita jäsenfunktioina tai ystäväfunktioina.
  • 🚫 rajat: Muutamia operaattoreita, kuten ::, . ja ?:, ei voida ylikuormittaa.
  • 🤖 Tekoälyn apu: Tekoälytyökalut, kuten GitHub Copilot, kirjoittavat operaattorin ylikuormitusfunktioita välittömästi.

C++ Operator Ylikuormitus

Mikä on Operatai ylikuormitus?

Käyttäminen käyttäjän ylikuormitus in C++, voit määrittää useamman kuin yhden merkityksen operaattorille yhdessä laajuudessa. Operaattorin ylikuormituksen tarkoituksena on tarjota operaattorille erityinen merkitys käyttäjän määrittämälle tietotyypille.

Käyttäjän ylikuormituksen avulla voit määrittää uudelleen suurimman osan C++ operaattorit. Voit myös käyttää operaattorin ylikuormitusta eri toimintojen suorittamiseen yhdellä operaattorilla.

Syntaksi

Ylikuormittaaksesi a C++ -operaattoria, sinun tulee määrittää luokan sisällä erityinen funktio seuraavasti:

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

Tässä on selitys yllä olevalle syntaksille:

  • Palautustyyppi on funktion palautustyyppi.
  • Seuraavaksi mainitset operaattorin avainsanan.
  • Symboli tarkoittaa ylikuormitettua käyttäjäsymbolia. Esimerkiksi +, -, <, ++.
  • Argumentti(t) voidaan välittää operaattorifunktiolle samalla tavalla kuin funktiot.

Esimerkki 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;
}

lähtö:

 Operator Ylikuormitus

Tässä on kuvakaappaus koodista:

 Operator Ylikuormitus

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä TestClass.
  4. Käytä yksityisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  5. Luo kokonaislukumuuttujamäärä. Tämä muuttuja on yksityisesti käytettävissä.
  6. Käytä julkisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  7. Käytä luokkakonstruktoria alustaaksesi muuttujalaskurin arvoksi 5.
  8. Ylikuormita operaattorin merkitys.
  9. Operaattori pienentää muuttujan x arvoa yhdellä.
  10. Kuljettajan ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
  11. Näyttö()-nimisen funktion määrittäminen.
  12. Tulosta muuttujan count arvo muun tekstin rinnalle konsoliin, kun Display()-funktiota kutsutaan. } merkitsee Display()-funktion rungon loppua.
  13. Luokan rungon loppu.
  14. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
  15. Luo esiintymä luokasta TestClass ja anna sille nimi tc.
  16. Tämä kutsuu void-operaattorin –()-funktion.
  17. Käytä TestClass Class -asentoa Display()-funktion kutsumiseen.
  18. Toiminnon on palautettava arvo, kun se on suoritettu.
  19. Funktion main() rungon loppu.

Erilaisia ​​lähestymistapoja Operator Ylikuormitus sisään C++

Voit suorittaa operaattorin ylikuormituksen toteuttamalla minkä tahansa seuraavista toiminnoista:

  1. Jäsentoiminto
  2. Ei-jäsentoiminto
  3. Ystävätoiminto
  • Operaattorin ylikuormitusfunktio voi olla jäsenfunktio, kun vasen operandi on luokan objekti.
  • Kun vasen operandi on erilainen, Operator-ylikuormitustoiminnon tulisi olla ei-jäsentoiminto.

Voit tehdä operaattorin ylikuormitustoiminnosta ystävätoiminnon, jos se tarvitsee pääsyn yksityisiin ja suojattuihin luokan jäseniin.

Voiko kaikki C++ Operaovatko ne ylikuormitettuja?

Ei. On C++ operaattorit, joita ei voi ylikuormittaa.

Niihin kuuluvat:

  • :: -Scope-resoluutiooperaattori
  • ?: -kolmioperaattori.
  • . -jäsenvalitsin
  • Operaattorin koko
  • * -jäsen osoittimen valitsin

Muistettavaa

  1. Operaattorin ylikuormituksella voit määrittää uudelleen tavan, jolla operaattori toimii vain käyttäjän määrittämille tyypeille (objektit, rakenteet). Et voi käyttää sitä sisäänrakennetuissa tyypeissä (float, char, int jne.).
  2. = ja & C++ operaattorit ovat oletuksena ylikuormitettuja. Voit esimerkiksi kopioida saman luokan objektit suoraan =-operaattorilla.
  3. OperaEnsisijaisuus ei muuta operaattoreiden assosiatiivisuutta ja ensisijaisuutta. Voit kuitenkin muuttaa arvioinnin järjestystä suluilla.
  4. On neljä operaattoria, joita et voi ylikuormittaa C++. Niitä ovat laajuuden erotteluoperaattori (::), jäsenvalintaoperaattori (.), jäsenvalinta osoittimen avulla toimintooperaattoriin (.*) ja kolmiosainen operaattori (?:).

Säännöt Operator Ylikuormitus

Tässä ovat säännöt Operator ylikuormitus:

  • Jotta se toimisi, vähintään yhden operandin on oltava käyttäjän määrittämä luokkaobjekti.
  • Voit ylikuormittaa vain olemassa olevia operaattoreita. Uusia operaattoreita ei voi ylikuormittaa.
  • Joitakin operaattoreita ei voi ylikuormittaa kaveritoiminnolla. Tällaiset operaattorit voidaan kuitenkin ylikuormittaa jäsentoimintoa käyttämällä.

Kuinka ylikuormittaa OperaTor

Esimerkki 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;
}

lähtö:

Ylikuormittaa Operator Esimerkki

Tässä on kuvakaappaus koodista:

Ylikuormittaa Operator Esimerkki

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä OperatoOverload.
  4. Käytä yksityisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  5. Luo kokonaislukumuuttuja x. Tämä muuttuja on yksityisesti käytettävissä.
  6. Käytä julkisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  7. Käytä luokkakonstruktoria alustaaksesi muuttujan x arvoon 10.
  8. Ylikuormitetaan ++-operaattorin merkitys.
  9. Operaattori lisää muuttujan x arvoa kahdella.
  10. Kuljettajan ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
  11. Print()-funktion kutsuminen.
  12. Tulosta muuttujan x arvo muun tekstin rinnalle konsolissa, kun Print()-funktiota kutsutaan.
  13. Print()-funktion rungon loppu.
  14. Luokan rungon loppu.
  15. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
  16. Luo esiintymä OperatorOverload Luokka nimeltä ov.
  17. Tämä kutsuu void-operaattorin ++() -funktion.
  18. Käytä asentoa OperatorOverload-luokka kutsuaksesi Print()-funktiota.
  19. Toiminnon on palautettava arvo, kun se on suoritettu.
  20. Funktion main() rungon loppu.

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

lähtö:

Ylikuormittaa Operator Esimerkki

Tässä on kuvakaappaus koodista:

Ylikuormittaa Operator Esimerkki

Code Selitys:

  1. Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttääksemme sen toimintoja.
  2. Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä TestClass. { merkitsee luokan rungon alkua.
  4. Käytä yksityisen käyttöoikeuden muokkaajaa merkitäksesi muuttujat yksityisiksi, mikä tarkoittaa, että niihin pääsee vain luokasta käsin.
  5. Määritä kaksi kokonaislukumuuttujaa, real ja over.
  6. Käytä julkisen käyttöoikeuden muokkaajaa merkitsemään rakentaja julkiseksi, mikä tarkoittaa, että se on käytettävissä myös luokan ulkopuolella.
  7. Luokan rakentajan luominen ja alustaminen muuttujat.
  8. Alusta muuttujan real arvo.
  9. Alusta muuttujan arvo yli.
  10. Rakentajan rungon loppu.
  11. Ohita +-operaattorin merkitys.
  12. Luo tietotyypin tulos, jonka tyyppi on TestClass.
  13. Käytä +-operaattoria kompleksilukujen kanssa. Tämä rivi lisää luvun reaaliosan toisen luvun reaaliosaan.
  14. Käytä +-operaattoria kompleksilukujen kanssa. Tämä rivi lisää luvun imaginaarisen osan toisen luvun imaginaariseen osaan.
  15. Ohjelma palauttaa muuttujan tuloksen arvon onnistuneen suorituksen jälkeen.
  16. + -operaattorin uuden merkityksen, eli ylikuormituksen, määritelmän loppu.
  17. Kutsu print()-menetelmää.
  18. Tulosta uusi kompleksiluku lisäyksen jälkeen konsolissa.
  19. Print()-funktion rungon loppu.
  20. TestClass-luokan rungon loppu.
  21. Main()-funktion kutsuminen.
  22. Sekä todellisten että monimutkaisten lisättävien osien arvojen välittäminen. C1:n ensimmäinen osa lisätään c2:n ensimmäiseen osaan, eli 9+4. C1:n toinen osa lisätään c:n toiseen osaan, eli 5+3.
  23. Toiminnon suorittaminen ylikuormitettu + -operaattorilla ja tuloksen tallentaminen muuttujaan c3.
  24. Muuttujan c3 arvon tulostaminen konsoliin.
  25. Main()-funktion rungon loppu.

UKK

Operator-ylikuormituksen avulla voit määrittää uudelleen, miten sisäänrakennetut operaattorit, kuten + tai ==, toimivat omien luokkiesi objektien kanssa, jotta ne toimivat luonnollisesti mukautetuissa tietotyypeissä.

Määrittele erikoisfunktio, jonka nimi on avainsana operaattori ja sen perässä oleva symboli, kuten operaattori+. Se ottaa operandit parametreina ja palauttaa tuloksen.

On olemassa kaksi pääasiallista lähestymistapaa: operaattorin ylikuormittaminen luokan jäsenfunktiona tai ystäväfunktiona, joka voi käyttää luokan yksityisiä jäseniä.

Useimmat operaattorit voidaan ylikuormittaa, mutta muutamat eivät, mukaan lukien laajuustarkkuus (::), jäsenten käyttö (.), jäsenosoitin (.*) ja kolmiosaiset (?:) operaattorit.

Voit ylikuormittaa vain olemassa olevia operaattoreita, vähintään yhden operandin on oltava käyttäjän määrittämä tyyppi, etkä voi muuttaa operaattorin prioriteettia, assosiatiivisuutta tai operandien lukumäärää.

Tekoälyavustajat, kuten GitHub Copilot, luovat luokillesi operaattorien ylikuormitusfunktioita, valitsevat jäsen- ja ystäväfunktioiden välillä ja lisäävät oikeat paluutyypit kirjoittaessasi.

Kyllä. Tekoälyllä toimivat työkalut luovat ylikuormitettuja operaattoreita, kuten + ja ==, noudattavat vakiosääntöjä ja merkitsevät operaattoreita, joita ei voida ylikuormittaa, mikä säästää aikaa ja virheitä.

OperaTor-ylikuormitus tekee luokkien käytöstä ja lukemisesta helpompaa antamalla objektien työskennellä tuttujen operaattoreiden kanssa, kuten kahden vektorin yhteenlaskun plusmerkillä nimetyn funktion sijaan.

Tiivistä tämä viesti seuraavasti: