C ++ Operatora pārslodze ar piemēriem

Satura rādītājs:

Anonim

Kas ir operatora pārslodze?

Izmantojot operatora pārslodzi C ++, vienā darbības jomā varat norādīt vairāk nekā vienu operatora nozīmi. Operatora pārslodzes mērķis ir nodrošināt operatora īpašu nozīmi lietotāja definētam datu tipam.

Izmantojot operatora pārslodzi, varat no jauna definēt lielāko daļu C ++ operatoru. Operatora pārslodzi var izmantot arī dažādu darbību veikšanai, izmantojot vienu operatoru.

Šajā C ++ apmācībā jūs uzzināsiet:

  • Kas ir operatora pārslodze?
  • Sintakse
  • Atšķirīgas pieejas operatora pārslodzei C ++
  • Vai visus C ++ operatorus var pārslogot?
  • Kas jāatceras:
  • Operatora pārslodzes noteikumi:
  • Operatora pārslodze:

Sintakse

Lai pārslogotu C ++ operatoru, jums klasē vajadzētu definēt īpašu funkciju šādi:

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

Šeit ir iepriekš minētās sintakses skaidrojums:

  • Return_type ir funkcijas return veids.
  • Pēc tam jūs pieminējat operatora atslēgvārdu.
  • Simbols apzīmē pārslogotu operatora simbolu. Piemēram, +, -, <, ++.
  • Argumentu (-us) operatora funkcijai var nodot tāpat kā funkcijas.

1. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iostream galvenes faila iekļaušana mūsu kodā, lai izmantotu tā funkcijas.
  2. Iekļaujiet standarta nosaukumvietu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izveidojiet klasi ar nosaukumu TestClass.
  4. Izmantojiet privātās piekļuves modifikatoru, kas klases dalībnieku atzīmē kā privāti pieejamu.
  5. Izveidojiet veselu skaitļu mainīgo skaitu. Šis mainīgais būs privāti pieejams.
  6. Izmantojiet publiskās piekļuves modifikatoru, kas klases dalībnieku atzīmē kā privāti pieejamu.
  7. Izmantojiet klases konstruktoru, lai inicializētu mainīgo skaitītāju līdz 5.
  8. Pārslogojiet operatora - jēgu.
  9. Operators samazinās mainīgā x vērtību par 1.
  10. Operatora pārslodzes sadaļas beigas. Operatoram ir piešķirts jauns nosaukums.
  11. Funkcijas ar nosaukumu Display () definēšana.
  12. Drukājot mainīgo skaita vērtību kopā ar citu tekstu konsolē, kad tiek izsaukta funkcija Display (). } Apzīmē funkcijas Display () korpusa beigas.
  13. Klases ķermeņa beigas.
  14. Izsauciet galveno () funkciju. Šajā funkcijā jāpievieno programmas loģika.
  15. Izveidojiet klases TestClass gadījumu un piešķiriet tam nosaukumu tc.
  16. Tas izsauks funkciju void operator - ().
  17. Izmantojiet TestClass klases nostāju, lai izsauktu funkciju Display ().
  18. Funkcijai ir jāatgriež vērtība pēc veiksmīgas pabeigšanas.
  19. Funkcijas main (() korpusa beigas.

Atšķirīgas pieejas operatora pārslodzei C ++

Operatora pārslodzi var veikt, ieviešot jebkuru no šiem funkciju veidiem:

  1. Dalībnieka funkcija
  2. Funkcija, kas nav loceklis
  3. Drauga funkcija
  • Operatora pārslodzes funkcija var būt dalībnieka funkcija, ja kreisais operands ir klases objekts.
  • Ja kreisais operands ir atšķirīgs, Operatora pārslodzes funkcijai jābūt funkcijai, kas nav loceklis.

Operatora pārslodzes funkciju var padarīt par drauga funkciju, ja tai nepieciešams piekļūt privātajiem un aizsargātajiem klases biedriem.

Vai visus C ++ operatorus var pārslogot?

Nē. Ir C ++ operatori, kurus nevar pārslogot.

Tie ietver:

  • :: - Darbības jomas izšķirtspējas operators
  • ?: -parastais operators.
  • . -biedru selektors
  • Operatora lielums
  • * -biedru kursora selektors

Kas jāatceras:

  1. Izmantojot operatora pārslodzi, varat no jauna definēt operatora darbības veidu tikai lietotāja definētiem tipiem (objektiem, struktūrām). Jūs to nevarat izmantot iebūvētiem tipiem (pludiņš, char, int utt.).
  2. Operatori = un & C ++ pēc noklusējuma ir pārslogoti. Piemēram, jūs varat kopēt tās pašas klases objektus tieši, izmantojot operatoru =.
  3. Operatora prioritāte nemaina operatoru asociativitāti un prioritāti. Tomēr jūs varat mainīt vērtēšanas kārtību, izmantojot iekavas.
  4. Ir četri operatori, kurus nevarat pārslogot C ++. Tie ietver darbības jomas izšķiršanas operatoru (: :), dalībnieku atlases operatoru (.), Dalībnieku izvēli, izmantojot rādītāju, lai darbotos ar operatoru (. *), Un trīskāršo operatoru (? :).

Operatora pārslodzes noteikumi:

Šie ir operatora pārslodzes noteikumi:

  • Lai tas darbotos, vismaz vienam operandam jābūt lietotāja definētam klases objektam.
  • Jūs varat pārslogot tikai esošos operatorus. Jūs nevarat pārslogot jaunus operatorus.
  • Dažus operatorus nevar pārslogot, izmantojot drauga funkciju. Tomēr šādus operatorus var pārslogot, izmantojot dalībnieka funkciju.

Operatora pārslodze:

1. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iostream galvenes faila iekļaušana mūsu kodā, lai izmantotu tā funkcijas.
  2. Iekļaujiet standarta nosaukumvietu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izveidojiet klasi ar nosaukumu OperatorOerload.
  4. Izmantojiet privātās piekļuves modifikatoru, kas klases dalībnieku atzīmē kā privāti pieejamu.
  5. Izveidojiet veselu skaitli mainīgo x. Šis mainīgais būs privāti pieejams.
  6. Izmantojiet publiskās piekļuves modifikatoru, kas klases dalībnieku atzīmē kā privāti pieejamu.
  7. Izmantojiet klases konstruktoru, lai inicializētu mainīgo x līdz 10.
  8. Pārslogojiet operatora ++ nozīmi.
  9. Operators palielinās mainīgā x vērtību ar 2.
  10. Operatora pārslodzes sadaļas beigas. Operatoram ir piešķirts jauns nosaukums.
  11. Zvanīšana uz funkciju Print ().
  12. Drukājot mainīgā x vērtību kopā ar citu tekstu konsolē, kad tiek izsaukta funkcija Print ().
  13. Funkcijas Print () pamatteksta beigas.
  14. Klases ķermeņa beigas.
  15. Izsauciet galveno () funkciju. Šajā funkcijā jāpievieno programmas loģika.
  16. Izveidojiet OperatorOerload klases instanci ar nosaukumu ov.
  17. Tas izsauks funkciju void operator ++ ().
  18. Izmantojiet OperatorOerload klases nostāju, lai izsauktu funkciju Print ().
  19. Funkcijai ir jāatgriež vērtība pēc veiksmīgas pabeigšanas.
  20. Funkcijas main (() korpusa beigas.

2. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iostream galvenes faila iekļaušana mūsu programmā, lai izmantotu tā funkcijas.
  2. Iekļaujiet standarta nosaukumvietu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izveidojiet klasi ar nosaukumu TestClass. {Apzīmē klases ķermeņa sākumu.
  4. Izmantojiet privātās piekļuves modifikatoru, lai mainīgos mainītu kā privātus, tas nozīmē, ka tiem var piekļūt tikai no klases.
  5. Definējiet divus veselu skaitļu mainīgos - reālus un lielākus.
  6. Izmantojiet publiskās piekļuves modifikatoru, lai atzīmētu konstruktoru kā publisku, kas nozīmē, ka tas būs pieejams pat ārpus klases.
  7. Klases konstruktora izveide un mainīgo inicializēšana.
  8. Inicializējiet mainīgā reālā vērtību.
  9. Inicializējiet mainīgā vērtību.
  10. Konstruktora korpusa beigas.
  11. Ignorēt operatora + nozīmi.
  12. Izveidojiet tipa TestClass datu tipa rezultātu.
  13. Izmantojiet operatoru + ar kompleksiem skaitļiem. Šī rinda skaitļa reālo daļu pievienos cita skaitļa reālajai daļai.
  14. Izmantojiet operatoru + ar kompleksiem skaitļiem. Šī rinda skaitļa iedomāto daļu pievienos cita skaitļa iedomātajai daļai.
  15. Pēc veiksmīgas izpildes programma atgriezīs mainīgā rezultāta vērtību.
  16. + Operatora jaunās nozīmes definīcijas beigas, tas ir, pārslodze.
  17. Izsauciet metodi print ().
  18. Pēc pievienošanas konsolē izdrukājiet jauno kompleksa numuru.
  19. Funkcijas pamatteksta () beigas.
  20. TestClass klases korpusa beigas.
  21. Galvenās () funkcijas izsaukšana.
  22. Gan pievienojamo reālo, gan sarežģīto daļu vērtību nodošana. Pirmā c1 daļa tiks pievienota c2 pirmajai daļai, tas ir, 9 + 4. C1 otrā daļa tiks pievienota c otrajai daļai, tas ir, 5 + 3.
  23. Veicot operāciju, izmantojot pārslogotu + operatoru un saglabājot rezultātu mainīgajā c3.
  24. Mainītāja c3 vērtības drukāšana uz konsoles.
  25. Galvenās () funkcijas ķermeņa beigas.

Kopsavilkums:

  • Vienā darbības jomā varat norādīt vairāk nekā vienu C ++ operatora nozīmi.
  • To sauc par operatora pārslodzi.
  • Operatora pārslodze nodrošina operatora īpašu nozīmi lietotāja definētam datu tipam.
  • Izmantojot operatora pārslodzi, varat no jauna definēt lielāko daļu C ++ operatoru.
  • Ne visus C ++ operatorus var pārslogot.
  • Lai operators būtu pārslogots, vismaz vienam no operandiem jābūt lietotāja definētam objektam.
  • Pārslogot var tikai esošos operatorus. Jūs nevarat pārslogot jaunus operatorus.