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

Despre limbajul de programare C++ si biblioteca standard STL (forum moderat)
Post Reply
User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

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

Post by Marius Bancila » 01 Aug 2007, 19:17

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 >>


Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Post Reply