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