Page 1 of 1

[C++] Cum supraincarc operatorii ++ si -- prefix si postfix?

Posted: 01 Aug 2007, 19:17
by Marius Bancila
Intrebare: Cum supraincarc operatorii ++ prefix si postfix?

Raspuns: Din cauza ca operatorii ++ si -- pot avea atat forma prefix cat si postfix, exista doua semnaturi pentru operatorul ++, respectiv --: una fara parametru, si una care ia un parametru de tip int ce este ignorat.

Code: Select all

class foo
{
public:
   foo& operator++ (); // prefix ++
   foo operator++ (int); // postfix ++
 }; 
unde

Code: Select all

foo& foo::operator++ ()
{
  // incrementeaza obiect
  return *this;
}

foo foo::operator++ (int)
{
  foo temp = *this;
  ++(*this);
  return temp;
}
Atentie la tipul returnat: acesta nu poate fi o referinta, intrucat ar indica spre un obiect care a iesit din scop odata cu returnarea apelului.

In aceste conditii se poate scrie:

Code: Select all

foo f1;
foo f2 = ++f1; // f2 contine valoarea incrementata a lui f1
foo f3 = f1++; // f2 contine valoarea anterioara a lui f1
Se poate insa modifica valoarea returnata de operatorul ++ sau --, astfel incat in loc de foo sa vie void.

Code: Select all

class foo
{
public:
   foo& operator++ (); // prefix ++
   void operator++ (int); // postfix ++
 }; 
caz in care:

Code: Select all

void foo::operator++ (int)
{
   ++(*this);
} 
In acest caz insa nu se mai poate scrie

Code: Select all

foo f1;
foo f3 = f1++; // EROARE: operatorul++ postfix nu returneaza nimic

Next FAQ >>