C ++ operaatori ülekoormamine näidetega

Lang L: none (table-of-contents):

Anonim

Mis on operaatori ülekoormus?

Kasutades operaatori ülekoormust C ++ versioonis, saate operaatori jaoks ühes ulatuses määrata rohkem kui ühe tähenduse. Operaatori ülekoormamise eesmärk on anda kasutaja määratletud andmetüübile operaatori eriline tähendus.

Operaatori ülekoormuse abil saate enamuse C ++ operaatoritest uuesti määratleda. Ühe operaatori abil erinevate toimingute tegemiseks võite kasutada ka operaatori ülekoormamist.

Selles C ++ õpetuses saate teada:

  • Mis on operaatori ülekoormus?
  • Süntaks
  • Erinevad lähenemised operaatori ülekoormusele C ++ keeles
  • Kas kõiki C ++ operaatoreid saab üle koormata?
  • Mida meeles pidada:
  • Operaatori ülekoormamise reeglid:
  • Operaatori ülekoormamine:

Süntaks

C ++ operaatori ülekoormamiseks peaksite klassi sees määratlema spetsiaalse funktsiooni järgmiselt:

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

Siin on ülaltoodud süntaksi selgitus:

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

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Iostreami päisefaili lisamine meie koodi, et selle funktsioone kasutada.
  2. Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega TestClass.
  4. Kasutage privaatse juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
  5. Loo täisarvu muutujate arv. See muutuja on eraviisiliselt juurdepääsetav.
  6. Kasutage avaliku juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
  7. Muutujaloenduri lähtestamiseks väärtuseks 5 kasutage klassi konstruktorit.
  8. - ülekoormage operaatori tähendust.
  9. Operaator vähendab muutuja x väärtust 1 võrra.
  10. Operaatori ülekoormamise osa lõpp. Operaatorile on antud uus nimi.
  11. Funktsiooni Funktsioon Display () määramine.
  12. Funktsiooni Display () kutsumisel printige muutujate arvu väärtus konsooli muu teksti kõrvale. } Tähistab funktsiooni Display () keha lõppu.
  13. Klassikeha lõpp.
  14. Helistage funktsioonile main (). Selle funktsiooni sisse tuleks lisada programmiloogika.
  15. Looge klassi TestClass eksemplar ja andke talle nimi tc.
  16. See kutsub funktsiooni void operator - ().
  17. Funktsiooni Display () kutsumiseks kasutage klassi TestClass hoiakut.
  18. Funktsioon peab edukal lõpetamisel tagastama väärtuse.
  19. Funktsiooni main () peaosa lõpp.

Erinevad lähenemised operaatori ülekoormusele C ++ keeles

Operaatori ülekoormamist saate teostada mis tahes järgmist tüüpi funktsioonide abil:

  1. Liikme funktsioon
  2. Mitteliikmeline funktsioon
  3. Sõbra funktsioon
  • Operaatori ülekoormusfunktsioon võib olla liikmefunktsioon, kui vasak operand on klassi objekt.
  • Kui vasak operand on erinev, peaks operaatori ülekoormusfunktsioon olema mitte-liikme funktsioon.

Operaatori ülekoormamise funktsioonist saate teha sõbrafunktsiooni, kui see vajab juurdepääsu privaatsetele ja kaitstud klassi liikmetele.

Kas kõiki C ++ operaatoreid saab üle koormata?

Ei. On C ++ operaatoreid, mida ei saa üle koormata.

Nad sisaldavad:

  • :: -Scope resolutsiooni operaator
  • ?: tavaline operaator.
  • . -liikme valija
  • Operaatori suurus
  • * -liikme kursori valija

Mida meeles pidada:

  1. Operaatori ülekoormuse korral saate uuesti määratleda, kuidas operaator töötab ainult kasutaja määratud tüüpide (objektid, struktuurid) puhul. Te ei saa seda kasutada sisseehitatud tüüpide jaoks (float, char, int jne).
  2. Operaatorid = ja & C ++ on vaikimisi ülekoormatud. Näiteks saate sama klassi objekte otse operaatori = abil kopeerida.
  3. Operaatori ülimuslikkus ei muuda operaatorite assotsiatiivsust ja tähtsust. Hindamise järjekorda saate aga muuta sulgude abil.
  4. Seal on neli operaatorit, mida te ei saa C ++ -s üle koormata. Need hõlmavad ulatuseralduse operaatorit (: :), liikme valikuoperaatorit (.), Liikme valimist kursori kaudu funktsioonioperaatoriks (. *) Ja kolmekordset operaatorit (? :).

Operaatori ülekoormamise reeglid:

Operaatori ülekoormamise reeglid on järgmised:

  • Selle toimimiseks peab vähemalt üks operand olema kasutaja määratud klassiobjekt.
  • Võite üle koormata ainult olemasolevaid operaatoreid. Te ei saa uusi operaatoreid üle koormata.
  • Mõnda operaatorit ei saa sõbrafunktsiooni abil üle koormata. Selliseid operaatoreid saab aga liikmefunktsiooni abil üle koormata.

Operaatori ülekoormamine:

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Iostreami päisefaili lisamine meie koodi, et selle funktsioone kasutada.
  2. Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega OperatorOverload.
  4. Kasutage privaatse juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
  5. Loo täisarvu muutuja x. See muutuja on eraviisiliselt juurdepääsetav.
  6. Kasutage avaliku juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
  7. Muutuja x initsialiseerimiseks 10-ni kasutage klassi konstruktorit.
  8. ++ operaatori tähenduse ülekoormus.
  9. Operaator suurendab muutuja x väärtust 2-ga.
  10. Operaatori ülekoormamise osa lõpp. Operaatorile on antud uus nimi.
  11. Funktsiooni Print () helistamine.
  12. Funktsiooni Print () kutsumisel printige muutuja x väärtus konsooli muu teksti kõrvale.
  13. Funktsiooni Print () sisu lõpp.
  14. Klassikeha lõpp.
  15. Helistage funktsioonile main (). Selle funktsiooni sisse tuleks lisada programmiloogika.
  16. Looge OperatorOverload klassi eksemplar nimega ov.
  17. See kutsub funktsiooni void operator ++ ().
  18. Funktsiooni Print () kutsumiseks kasutage klassi OperatorOverload hoiakut.
  19. Funktsioon peab edukal lõpetamisel tagastama väärtuse.
  20. Funktsiooni main () peaosa lõpp.

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

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Iostreami päisefaili lisamine meie programmi selle funktsioonide kasutamiseks.
  2. Kaasake standardne nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
  3. Looge klass nimega TestClass. {Tähistab klassikeha algust.
  4. Muutujate privaatseks märkimiseks kasutage privaatse juurdepääsu modifikaatorit, mis tähendab, et neile pääseb juurde ainult klassi sees.
  5. Määratlege kaks täisarvu muutujat, reaalne ja üle.
  6. Kasutage avaliku juurdepääsu modifikaatorit, et märkida konstruktor avalikuks, mis tähendab, et sellele pääseb juurde ka väljaspool klassi.
  7. Klassikonstruktori loomine ja muutujate lähtestamine.
  8. Initsialiseerige muutuja reaalne väärtus.
  9. Initsialiseerige muutuja väärtus üle.
  10. Konstruktori kere ots.
  11. Alistage operaatori + tähendus.
  12. Looge tüübi TestClass andmetüübi tulemus.
  13. Kasutage kompleksarvudega operaatorit +. See rida lisab numbri reaalse osa teise numbri reaalseks osaks.
  14. Kasutage kompleksarvudega operaatorit +. See rida lisab arvu kujuteldava osa teise numbri kujuteldavale osale.
  15. Programm tagastab edukal täitmisel muutuja tulemuse väärtuse.
  16. + Operaatori uue tähenduse ehk ülekoormuse määratluse lõpp.
  17. Helistage meetodile print ().
  18. Pärast konsoolile lisamist printige uus kompleksnumber.
  19. Funktsiooni prindikeha () lõpp.
  20. TestClass-klassi kere lõpp.
  21. Funktsiooni main () kutsumine.
  22. Nii reaalsete kui ka keeruliste lisatavate osade väärtuste edastamine. 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. Toimingu sooritamine ülekoormatud + operaatori abil ja tulemuse salvestamine muutujasse c3.
  24. Muutuja c3 väärtuse printimine konsoolile.
  25. Põhifunktsiooni () keha lõpp.

Kokkuvõte:

  • Ühes ulatuses saate C ++ operaatori jaoks määrata mitu tähendust.
  • Seda nimetatakse operaatori ülekoormamiseks.
  • Operaatori ülekoormamine annab operaatori jaoks erilise tähenduse kasutaja määratud andmetüübi jaoks.
  • Operaatori ülekoormuse abil saate enamiku C ++ operaatoritest uuesti määratleda.
  • Kõiki C ++ operaatoreid ei saa üle koormata.
  • Operaatori ülekoormamiseks peab vähemalt üks operandidest olema kasutaja määratud objekt.
  • Ainult olemasolevaid operaatoreid saab üle koormata. Te ei saa uusi operaatoreid üle koormata.