14.6. Suprascrierea operațiunilor (rezumat)
Crearea unui nou tip de date. Am fost obligați să explicăm compilatorului cum să efectueze operații obișnuite (adunare, scădere, comparare, intrare / ieșire etc.) cu obiecte de tip nou. De fapt, operațiile sunt simple funcții, la intrarea cărora sunt primite unul sau doi operanzi, se efectuează o acțiune condițională asupra acestora și se formează o valoare de returnare. În acest sens, redefinirea operațiunilor, în practică, nu diferă deloc de redefinirea funcțiilor. În forma cea mai generală, operațiunea este redefinită după cum urmează:
Iată semnul operației.
Singura diferență de depășire a funcției este într-un nume specific care înlocuiește numele funcției.
Datorită faptului că ar trebui să fie menținută de către compilator, procesarea aritmetică logică și formule logice, procedurile de intrare / ieșire, operatori de atribuire, incrementarea și decrementarea, trei restricții importante sunt impuse asupra operațiunilor de suprascriere:
- prioritate a operațiunilor. descrise în standardul C ++, nu pot fi schimbate;
- Numărul de operanzi care a fost inițial declarat în limba pentru fiecare operație trebuie salvat;
- Nu puteți să înlocuiți operațiunile "." (Separator un nume compus) (adresa domeniului obiectului printr-un pointer), '::' (furnituri specificatorul) ' '*.':' (Expresie condițională) '' (directiva preprocessor), '# ##' (operație de concatenare în preprocesor).
Când scrieți procedura de redefinire a unei operații pe două locuri, rețineți că argumentul a1. situat în partea stângă a semnului de funcționare. este transferată funcției membre a clasei în două moduri. În primul rând, câmpurile obiectului declarate ca date membre ale clasei. În al doilea rând, ca un indicator ascuns. Prin urmare, primul operand al operației nu este specificat ca un argument în funcția de suprascriere.
O altă restricție privind funcția de suprascriere este aceea că parametrii impliciți nu pot fi utilizați.
Să luăm în considerare variantele de suprascriere a operațiilor pe două locuri pe un exemplu de clasă Tpoint. reprezentând un punct cu o pereche de coordonate întregi:
Operația de adunare declarată în exemplul de mai sus are ca valoare valoarea celui de-al doilea termen. Prin urmare, descrierea noii proceduri ar putea arăta astfel: