Preobremenitev operaterja C ++ s primeri

Kazalo:

Anonim

Kaj je preobremenitev operaterja?

Z uporabo preobremenitve operaterja v jeziku C ++ lahko v enem obsegu določite več kot en pomen za operaterja. Namen preobremenitve operaterja je zagotoviti poseben pomen operaterja za uporabniško določen podatkovni tip.

S pomočjo preobremenitve operaterja lahko na novo definirate večino operaterjev C ++. Preobremenitev operaterja lahko uporabite tudi za izvajanje različnih operacij z enim operaterjem.

V tej vadnici C ++ boste izvedeli:

  • Kaj je preobremenitev operaterja?
  • Sintaksa
  • Različni pristopi k preobremenitvi operaterja v jeziku C ++
  • Ali so lahko vsi operaterji C ++ preobremenjeni?
  • Stvari, ki jih je treba zapomniti:
  • Pravila za preobremenitev operaterja:
  • Kako preobremeniti operaterja:

Sintaksa

Če želite preobremeniti operaterja C ++, morate znotraj razreda definirati posebno funkcijo, kot sledi:

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

Tu je razlaga za zgornjo skladnjo:

  • Return_type je vrsta vrnitve za funkcijo.
  • Nato omenite ključno besedo operator.
  • Simbol označuje operacijski simbol, ki ga je treba preobremeniti. Na primer +, -, <, ++.
  • Argument (-e) lahko posredujete funkciji operaterja na enak način kot funkcije.

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave iostream v našo kodo za uporabo njenih funkcij.
  2. V naš program vključite imenski prostor std, da lahko uporablja njegove razrede, ne da bi ga poklical.
  3. Ustvarite razred z imenom TestClass.
  4. Uporabite modifikator zasebnega dostopa, ki člana predavanja označi kot zasebno dostopnega.
  5. Ustvari število celih spremenljivk. Ta spremenljivka bo zasebno dostopna.
  6. Uporabite modifikator javnega dostopa, ki člana predavanja označi kot zasebno dostopnega.
  7. S konstruktorjem razreda inicializirajte števec spremenljivk na 5.
  8. Preobremenite pomen operatorja.
  9. Operater bo vrednost spremenljivke x zmanjšal za 1.
  10. Konec odseka za preobremenitev operaterja. Operater je dobil novo ime.
  11. Določitev funkcije z imenom Display () function.
  12. Ko pokličete funkcijo Display (), na konzolo natisnite vrednost števila spremenljivk skupaj z drugim besedilom. The} označuje konec telesa funkcije Display ().
  13. Konec predavanja.
  14. Pokličite glavno funkcijo. V to funkcijo je treba dodati programsko logiko.
  15. Ustvari primerek razreda TestClass in mu daj ime tc.
  16. To bo poklicalo funkcijo void operator - ().
  17. Uporabite položaj TestClass Class, da pokličete funkcijo Display ().
  18. Funkcija mora vrniti vrednost po uspešnem zaključku.
  19. Konec telesa funkcije main ().

Različni pristopi k preobremenitvi operaterja v jeziku C ++

Preobremenitev operaterja lahko izvedete z izvajanjem katere koli od naslednjih vrst funkcij:

  1. Funkcija člana
  2. Nečlanska funkcija
  3. Prijateljska funkcija
  • Funkcija preobremenitve operaterja je lahko funkcija člana, če je Levi operand objekt razreda.
  • Če je levi operand drugačen, mora biti funkcija preobremenitve operaterja funkcija, ki ni članica.

Funkcijo preobremenitve operaterja lahko nastavite kot funkcijo prijatelja, če mora dostopati do zasebnih in zaščitenih članov razreda.

Ali so lahko vsi operaterji C ++ preobremenjeni?

Ne. Obstajajo operaterji C ++, ki jih ni mogoče preobremeniti.

Vključujejo:

  • :: -Operator ločljivosti
  • ?: -ternarni operater.
  • . -izbirnik članov
  • Velikost operaterja
  • * Izbirnik kazalca za člane

Stvari, ki jih je treba zapomniti:

  1. S preobremenitvijo operaterja lahko na novo definirate način delovanja operaterja samo za uporabniško določene vrste (predmeti, strukture). Ne morete ga uporabljati za vgrajene vrste (float, char, int itd.).
  2. Operatorja = in & C ++ sta privzeto preobremenjena. Predmete istega razreda lahko na primer prekopirate neposredno z operatorjem =.
  3. Prednost operaterja ne spreminja asociativno in prednosti operaterjev. Vrstni red ocenjevanja pa lahko spremenite z oklepaji.
  4. Obstajajo štirje operaterji, ki jih v C ++ ne morete preobremeniti. Vključujejo operator ločljivosti obsega (: :), operater za izbiro člana (.), Izbor člana prek kazalca na funkcijski operator (. *) In ternarni operator (? :).

Pravila za preobremenitev operaterja:

Tu so pravila za preobremenitev operaterja:

  • Da bo deloval, mora biti vsaj en operand uporabniško definiran objekt razreda.
  • Preobremenite lahko samo obstoječe operaterje. Ne morete preobremeniti novih operaterjev.
  • Nekaterih operaterjev ni mogoče preobremeniti s funkcijo prijatelja. Vendar pa je takšne operaterje mogoče preobremeniti s funkcijo člana.

Kako preobremeniti operaterja:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave iostream v našo kodo za uporabo njenih funkcij.
  2. V naš program vključite imenski prostor std, da lahko uporablja njegove razrede, ne da bi ga poklical.
  3. Ustvarite razred z imenom OperatorOverload.
  4. Uporabite modifikator zasebnega dostopa, ki člana predavanja označi kot zasebno dostopnega.
  5. Ustvari celoštevilčno spremenljivko x. Ta spremenljivka bo zasebno dostopna.
  6. Uporabite modifikator javnega dostopa, ki člana predavanja označi kot zasebno dostopnega.
  7. Uporabite konstruktor razreda za inicializacijo spremenljivke x na 10.
  8. Preobremenite pomen operaterja ++.
  9. Operator bo vrednost spremenljivke x povečal z 2.
  10. Konec odseka za preobremenitev operaterja. Operater je dobil novo ime.
  11. Klicanje funkcije Print ().
  12. Ko pokličete funkcijo Print (), na konzolo natisnite vrednost spremenljivke x skupaj z drugim besedilom.
  13. Konec telesa funkcije Print ().
  14. Konec predavanja.
  15. Pokličite glavno funkcijo. V to funkcijo je treba dodati programsko logiko.
  16. Ustvarite primerek razreda OperatorOverload z imenom ov.
  17. To bo poklicalo funkcijo void operator ++ ().
  18. Uporabite položaj razreda OperatorOverload, da pokličete funkcijo Print ().
  19. Funkcija mora vrniti vrednost po uspešnem zaključku.
  20. Konec telesa funkcije main ().

2. primer:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave iostream v naš program, da lahko uporabljate njene funkcije.
  2. V naš program vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  3. Ustvarite razred z imenom TestClass. {Označuje začetek telesa predavanja.
  4. S spremeniteljem zasebnega dostopa označite spremenljivke kot zasebne, kar pomeni, da je do njih mogoče dostopati samo znotraj razreda.
  5. Določite dve celoštevilčni spremenljivki, realno in več.
  6. Uporabite modifikator javnega dostopa, da konstruktor označite kot javni, kar pomeni, da bo dostopen tudi zunaj razreda.
  7. Ustvarjanje konstruktorja razreda in inicializacija spremenljivk.
  8. Inicializirajte vrednost spremenljivke real.
  9. Inicializirajte vrednost spremenljivke nad.
  10. Konec telesa konstruktorja.
  11. Preglasite pomen operatorja +.
  12. Ustvarite rezultat podatkovnega tipa za tip TestClass.
  13. Uporabite operator + s kompleksnimi številkami. Ta vrstica bo dodala pravi del številke stvarnemu delu druge številke.
  14. Uporabite operator + s kompleksnimi številkami. Ta vrstica bo namišljeni del števila dodala namišljenemu delu drugega števila.
  15. Program bo vrnil vrednost spremenljivke rezultat po uspešni izvedbi.
  16. Konec definicije novega pomena operatorja +, to je preobremenitve.
  17. Pokličite metodo print ().
  18. Po dodajanju na konzolo natisnite novo kompleksno številko.
  19. Konec funkcije telesa tiskanja ().
  20. Konec telesa razreda TestClass.
  21. Klic glavne () funkcije.
  22. Prenos vrednosti realnih in kompleksnih delov, ki jih je treba dodati. Prvi del c1 bo dodan prvemu delu c2, to je 9 + 4. Drugi del c1 bo dodan drugemu delu c, to je 5 + 3.
  23. Izvedba operacije z uporabo preobremenjenega operatorja + in shranjevanje rezultata v spremenljivko c3.
  24. Tiskanje vrednosti spremenljivke c3 na konzolo.
  25. Konec telesa glavne () funkcije.

Povzetek:

  • V enem obsegu lahko določite več kot en pomen za operaterja C ++.
  • To se imenuje preobremenitev operaterja.
  • Preobremenitev operaterja daje poseben pomen operaterja za uporabniško določen tip podatkov.
  • Večino operaterjev C ++ lahko na novo definirate s preobremenitvijo operaterja.
  • Vseh operaterjev C ++ ni mogoče preobremeniti.
  • Da je operater preobremenjen, mora biti vsaj eden od operandov uporabniško določen objekt.
  • Preobremenjeni so lahko samo obstoječi operaterji. Ne morete preobremeniti novih operaterjev.