Increment ++ și Decrement - Supraîncărcarea operatorului în programarea C ++

În acest exemplu, veți învăța să suprasolicitați incrementarea ++ și decrementarea - operatorii din C ++.

Pentru a înțelege acest exemplu, ar trebui să aveți cunoștințele următoarelor subiecte de programare C ++:

  • Clase și obiecte C ++
  • C ++ Constructori
  • Supraîncărcarea operatorului C ++

În acest tutorial, incrementarea ++ și decrementele - operatorul sunt supraîncărcate în cel mai bun mod posibil, adică crește valoarea unui membru de date cu 1 dacă operatorul ++ operează pe un obiect și scade valoarea membrului de date cu 1 dacă - operator este folosit.

Exemplul 1: Prefix ++ Increment Operator Suprasarcină fără tip de returnare

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )

Ieșire

 i = 0 i = 1

Inițial atunci când obiectul obiect este declarat, valoarea membrului de date i pentru obiectul obiect este 0 (constructorul inițializează i la 0).

Atunci când operatorul ++ este operat pe obiect, void operator++( )este invocată funcția operatorului, ceea ce mărește valoarea de membru i la 1

Acest program nu este complet în sensul că nu puteți utiliza codul:

 obj1 = ++ obj;

Acest lucru se datorează faptului că tipul de returnare a funcției de operator din programul de mai sus este nul.

Iată mica modificare a programului de mai sus, astfel încât să puteți utiliza codul obj1 = ++obj.

Exemplul 2: Prefix Increment ++ supraîncărcare operator cu tip return

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )

Ieșire

 i = 0 i = 0 i = 1 i = 1

Acest program este similar cu cel de mai sus.

Singura diferență este că, tipul de returnare a funcției operatorului este Check în acest caz, care permite utilizarea ambelor coduri ++obj; obj1 = ++obj;. Acest lucru se datorează faptului că, temperatura returnată de funcția operator este stocată în obiect obiect.

Deoarece, tipul de returnare a funcției de operator este Verificare, puteți atribui valoarea obiect unui alt obiect.

Observați că, = (operator de atribuire) nu trebuie supraîncărcat deoarece acest operator este deja supraîncărcat în biblioteca C ++.

Exemplul 3: Postfix Increment ++ Supraîncărcarea operatorului

Supraîncărcarea operatorului de incrementare până în acest moment este adevărată numai dacă este utilizată sub formă de prefix.

Aceasta este modificarea programului de mai sus pentru a face acest lucru să funcționeze atât pentru formularul de prefix, cât și pentru formularul de postfix.

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 0 i = 0 i = 1 i = 1 i = 2 i = 1

When increment operator is overloaded in prefix form; Check operator ++ () is called but, when increment operator is overloaded in postfix form; Check operator ++ (int) is invoked.

Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.

Don't confuse this int doesn't indicate integer.

Example 4: Operator Overloading of Decrement -- Operator

Decrement operator can be overloaded in similar way as increment operator.

 #include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 3 i = 3 i = 2 i = 2 i = 1 i = 2

Also, unary operators like: !, ~ etc can be overloaded in similar manner.

Articole interesante...