C ++ - käyttäjän ylikuormitus esimerkeillä

Sisällysluettelo:

Anonim

Mikä on käyttäjän ylikuormitus?

Käyttämällä operaattorin ylikuormitusta C ++: ssa voit määrittää operaattorille useamman kuin yhden merkityksen yhdessä laajuudessa. Operaattorin ylikuormituksen tarkoituksena on antaa operaattorille erityinen merkitys käyttäjän määrittelemälle tietotyypille.

Operaattorin ylikuormituksen avulla voit määrittää suurimman osan C ++ -operaattoreista. Voit myös käyttää operaattorin ylikuormitusta eri toimintojen suorittamiseen yhdellä operaattorilla.

Tässä C ++ -opetusohjelmassa opit:

  • Mikä on käyttäjän ylikuormitus?
  • Syntaksi
  • Eri lähestymistavat käyttäjän ylikuormitukseen C ++: ssa
  • Voidaanko kaikkia C ++ -operaattoreita ylikuormittaa?
  • Muistettavaa:
  • Kuljettajan ylikuormituksen säännöt:
  • Kuinka ylikuormittaa käyttäjää:

Syntaksi

C ++ -operaattorin ylikuormittamiseksi sinun on määriteltävä luokan sisällä erityinen toiminto seuraavasti:

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

Tässä on selitys yllä olevalle syntaksille:

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

Esimerkki 1:

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

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Iostream-otsikkotiedoston sisällyttäminen koodiin käyttämään sen toimintoja.
  2. Sisällytä vakio nimitila ohjelmaamme käyttääksesi luokkia sitä kutsumatta.
  3. Luo luokka nimeltä TestClass.
  4. Käytä yksityisen pääsyn muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  5. Luo kokonaisluku muuttujien määrä. Tämä muuttuja on yksityisesti käytettävissä.
  6. Käytä julkisen pääsyn muokkaajaa, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  7. Aloita muuttujalaskuri arvoon 5 rakentajalla.
  8. Ylikuormita operaattorin merkitystä.
  9. Operaattori vähentää muuttujan x arvoa yhdellä.
  10. Käyttäjän ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
  11. Funktion määrittäminen nimeltä Display () -toiminto.
  12. Tulosta muuttujien määrän arvo konsolin muun tekstin viereen, kun näyttö () -toimintoa kutsutaan. } Merkitsee Display () -toiminnon rungon loppua.
  13. Luokan loppu.
  14. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
  15. Luo luokan TestClass esiintymä ja anna sille nimi tc.
  16. Tämä kutsuu void operator - () - toimintoa.
  17. Kutsu Display () -toimintoa käyttämällä TestClass-luokan viritystä.
  18. Funktion on palautettava arvo, kun se on suoritettu onnistuneesti.
  19. Funktion main () rungon pää.

Eri lähestymistavat käyttäjän ylikuormitukseen C ++: ssa

Voit suorittaa operaattorin ylikuormituksen toteuttamalla minkä tahansa seuraavista toiminnoista:

  1. Jäsenfunktio
  2. Muu kuin jäsen -toiminto
  3. Ystävätoiminto
  • Operaattorin ylikuormitustoiminto voi olla jäsenfunktio, kun vasen operandi on luokan kohde.
  • Kun vasen operandi on erilainen, käyttäjän ylikuormitustoiminnon tulisi olla jäsenen ulkopuolinen toiminto.

Voit tehdä käyttäjän ylikuormitustoiminnosta ystävätoiminnon, jos sen on käytettävä yksityisiä ja suojattuja luokan jäseniä.

Voidaanko kaikkia C ++ -operaattoreita ylikuormittaa?

Ei. On C ++ -operaattoreita, joita ei voida ylikuormittaa.

Ne sisältävät:

  • :: -Skoopin tarkkuuden operaattori
  • ?: tavallinen operaattori.
  • . -jäsenvalitsin
  • Operaattorin koko
  • * -jäsenosoittimen valitsin

Muistettavaa:

  1. Operaattorin ylikuormituksen avulla voit määrittää operaattorin toiminnan uudelleen vain käyttäjän määrittelemille tyyppeille (objektit, rakenteet). Et voi käyttää sitä sisäänrakennettuihin tyyppeihin (float, char, int jne.).
  2. Operaattorit = ja & C ++ ovat oletusarvoisesti ylikuormitettuja. Voit esimerkiksi kopioida saman luokan objektit suoraan = -operaattorin avulla.
  3. Operaattorin etusija ei muuta operaattoreiden assosiatiivisuutta ja etusijaa. Voit kuitenkin muuttaa arvioinnin järjestystä sulkeilla.
  4. On neljä operaattoria, joita et voi ylikuormittaa C ++: ssa. Ne sisältävät laajuusresoluutiooperaattorin (: :), jäsenvalintaoperaattorin (.), Jäsenvalinnan osoittimen kautta toimiva operaattori (. *) Ja kolmikantaisen operaattorin (? :).

Kuljettajan ylikuormituksen säännöt:

Tässä ovat säännöt käyttäjän ylikuormitukselle:

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

Kuinka ylikuormittaa käyttäjää:

Esimerkki 1:

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

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Iostream-otsikkotiedoston sisällyttäminen koodiin käyttämään sen toimintoja.
  2. Sisällytä vakio nimitila ohjelmaamme käyttääksesi luokkia sitä kutsumatta.
  3. Luo luokka nimeltä OperatorOverload.
  4. Käytä yksityisen pääsyn 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 pääsyn muokkaajaa, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
  7. Alusta muuttuja x arvoon 10 käyttämällä luokan konstruktoria.
  8. Ylikuormita ++ -operaattorin merkitystä.
  9. Operaattori lisää muuttujan x arvoa arvolla 2.
  10. Käyttäjän ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
  11. Tulosta () -toiminnon soittaminen.
  12. Tulosta muuttujan x arvo konsolin muun tekstin viereen, kun Tulosta () -toimintoa kutsutaan.
  13. Tulosta () -toiminnon rungon loppu.
  14. Luokan loppu.
  15. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
  16. Luo OperatorOverload-luokan ilmentymä nimeltä ov.
  17. Tämä kutsuu void operator ++ () -toiminnon.
  18. Kutsu Tulosta () -toiminto käyttämällä OperatorOerload-luokan viritystä.
  19. Funktion on palautettava arvo, kun se on suoritettu onnistuneesti.
  20. Funktion main () rungon pää.

Esimerkki 2:

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

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Iostream-otsikkotiedoston sisällyttäminen ohjelmaamme sen toimintojen käyttämiseksi.
  2. Sisällytä vakio nimitila ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  3. Luo luokka nimeltä TestClass. {Tarkoittaa luokkaosan alkua.
  4. Merkitse muuttujat yksityisiksi yksityisen käyttöoikeuden muokkaimella, mikä tarkoittaa, että niihin pääsee vain luokan sisällä.
  5. Määritä kaksi kokonaislukumuuttujaa, reaali ja yli.
  6. Käytä julkisen pääsyn modifikaattoria merkitäksesi rakentajan julkiseksi, mikä tarkoittaa, että siihen pääsee myös luokan ulkopuolella.
  7. Luokkakonstruktorin luominen ja muuttujien alustaminen.
  8. Alusta muuttujan real arvo.
  9. Alusta muuttujan arvo.
  10. Rakentajan rungon pää.
  11. Ohita + -operaattorin merkitys.
  12. Luo tyypin TestClass tietotyyppitulos.
  13. Käytä + -operaattoria kompleksilukuilla. Tämä rivi lisää luvun todellisen osan toisen luvun oikeaan osaan.
  14. Käytä + -operaattoria kompleksilukuilla. Tämä rivi lisää luvun kuvitteellisen osan toisen luvun kuvitteelliseen osaan.
  15. Ohjelma palauttaa muuttujan tuloksen arvon onnistuneen suorituksen jälkeen.
  16. + -Operaattorin uuden merkityksen eli ylikuormituksen määritelmän loppu.
  17. Kutsu tulostusmenetelmä ().
  18. Tulosta uusi kompleksinumero numeron lisäämisen jälkeen konsoliin.
  19. Tulostusteksti () -toiminnon loppu.
  20. TestClass-luokan rungon pää.
  21. Päätoiminnon () kutsuminen.
  22. Lisätään sekä todellisten että monimutkaisten osien arvot. C1: n ensimmäinen osa lisätään c2: n ensimmäiseen osaan, toisin sanoen 9 + 4. C1: n toinen osa lisätään c: n toiseen osaan, ts. 5 + 3.
  23. Toiminnon suorittaminen ylikuormitetulla + -operaattorilla ja tuloksen tallentaminen muuttujaan c3.
  24. Tulostetaan muuttujan c3 arvo konsolille.
  25. Päätoiminnon () rungon loppu.

Yhteenveto:

  • Voit määrittää useamman kuin yhden merkityksen C ++ -operaattorille yhdessä laajuudessa.
  • Tätä kutsutaan käyttäjän ylikuormitukseksi.
  • Operaattorin ylikuormitus antaa operaattorille erityisen merkityksen käyttäjän määrittelemälle tietotyypille.
  • Voit määrittää suurimman osan C ++ -operaattoreista operaattorin ylikuormituksen avulla.
  • Kaikkia C ++ -operaattoreita ei voi ylikuormittaa.
  • Operaattorin ylikuormittamiseksi vähintään yhden operandeista on oltava käyttäjän määrittämä objekti.
  • Vain olemassa olevat operaattorit voivat olla ylikuormitettuja. Et voi ylikuormittaa uusia operaattoreita.