14 Supraincarcarea Functiil

  • Uploaded by: Patrick Johnston
  • 0
  • 0
  • July 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 14 Supraincarcarea Functiil as PDF for free.

More details

  • Words: 706
  • Pages: 3
14. Supraîncărcarea funcţiilor şi operatorilor Supraîncărcarea funcţiilor Supraîncărcarea funcţiilor este procesul de folosire a aceluiaşi nume pentru două sau mai multe funcţii. Esenţial este ca fiecare redefinire să folosească sau tipuri diferite sau un număr diferit de parametri. ATENŢIE: Nu pot fi surpraîncărcate două funcţii care diferă doar prin tipul returnat, cum ar fi exemplul următor: int funtie(int i); float functie(int i); //error: nu este suficient ca tipurile returnate să difere. Supraîncărcarea operatorilor O funcţie operator defineşte operaţiile specifice pe care le va efectua operatorul supraîncărcat relativ la clasa în care este destinat să lucreze. Funcţiile operator pot fi sau nu membri ai clasei în care vor opera. Funcţiile operator care nu sunt de tip membru sunt totuşi, de obicei, funcţii friend ale clasei. Felul în care sunt scrise funcţiile operator diferă pentru cele de tip membru de cele pentru friend. #include using namespace std; class COORDONATA { int x, y; public: COORDONATA(){} COORDONATA(int i, int j){ x = i; y = j; } void arata() { cout<<"x="<<x<<" "; cout<<"y="<
return operand_temp; }*/ COORDONATA operator=(COORDONATA operand_dreapta) { x = operand_dreapta.x; y = operand_dreapta.y; return *this; } COORDONATA operator++() { x++; y++; return *this; } }; void main() { COORDONATA c1(1, 3), c2(2, 6); (++c1).arata(); (c2 - c1).arata(); (c1 * c2).arata(); (c2 = c1).arata(); } Operandul-din-stânga este pasat implicit funcţiei operator folosind pointerul this. Operandul-din-dreapta este pasat în parametrul operand_dreapta.  când există operatori binari supraîncărcaţi, cel care generează apelarea funcţiei operator este operandu-din-stânga. RESTRICŢII: 1. nu se poate modifica precedenţa unui operator; 2. nu se poate modifica numărul operanzilor preluaţi de un operator (dar se poate ignora unul); 3. funcţiile operator nu pot avea argumente implicite; 4. următorii operatori nu pot fi supraîncărcaţi: . :: .* ? Supraîncărcarea operatorilor folosind o funcţie friend Un prieten nu este membru al clasei, deci nu are un pointer this. De accea, unei funcţii surpaîncărcate de tip friend operator i se transmit explicit operanzii. Aceasta înseamnă că un prieten care supraîncarcă un operator binar are doi parametri, iar unul care supraîncarcă un operator unar are un parametru. Când supraîncărcaţi un operator binar, operandul din stânga este plasat în primul parametru iar cel din dreapta în cel de-al doilea parametru al funcţiei friend operator. #include class LOC { int x, y; public: LOC() {} LOC(int i, int j) { x = i; y = j; } void arata() {cout<<x<<" "<
void main() { LOC l1(1, 1), l2(2, 2); (++l1).arata(); } RESTRICŢII: 1. nu se pot supraîncărca operatorii =, (), [] sau -> folosind funcţii friend; 2. când se supraîncarcă operatorii de incrementare sau decrementare utilizând funcţii friend, trebuie folosit un parametru de referinţă. Pentru supraîncărcarea operatorilor de incrementare sau decrementare, trebuie să transmiteţi operandul ca parametru de referinţă, deoarece funcţiile friend nu au pointeri this. Pentru explicaţii vezi: “Herber Schildt – C++ Manual Complet, p. 356). Pentru versiunea cu sufix se specifică un al doilea parametru întreg, fictiv: friend LOC operator++(LOC &op, int a); #include using namespace std; class LOC { int x, y; public: LOC() {} LOC(int i, int j) {x = i; y = j;} void arata(){cout<<x<<" "<

Related Documents

14
November 2019 20
14
November 2019 22
14
May 2020 17
14
May 2020 19
14
June 2020 10

More Documents from ""