Šajā piemērā jūs iemācīsities pārslogot pieaugumu ++ un decrement - operatorus C ++.
Lai saprastu šo piemēru, jums jāzina par šādām C ++ programmēšanas tēmām:
- C ++ klases un objekti
- C ++ konstruktori
- C ++ Operatora pārslodze
Šajā apmācībā pieaugums ++ un samazinājums - operators tiek pārslogots vislabākajā iespējamajā veidā, ti, palieliniet datu dalībnieka vērtību par 1, ja operators ++ darbojas ar objektu, un samaziniet datu dalībnieka vērtību par 1, ja - operators tiek izmantots.
1. piemērs: Prefikss ++ Operatora pieaugums Pārslodze bez atgriešanās veida
#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; )
Rezultāts
i = 0 i = 1
Sākotnēji, kad tiek deklarēts objekts obj, datu objekta i vērtība objektam obj ir 0 (konstruktors ieceļ i līdz 0).
Ja operētājsistēmu ++ darbina ar obj, void operator++( )
tiek izmantota operatora funkcija, kas palielina datu elementa i vērtību līdz 1.
Šī programma nav pilnīga tādā nozīmē, ka jūs nevarat izmantot kodu:
obj1 = ++ obj;
Tas ir tāpēc, ka operatora funkcijas atgriešanās veids iepriekš minētajā programmā nav derīgs.
Šeit ir neliela iepriekšējās programmas modifikācija, lai jūs varētu izmantot kodu obj1 = ++obj
.
2. piemērs: prefikss Increment ++ operatora pārslodze ar atgriešanās veidu
#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; )
Rezultāts
i = 0 i = 0 i = 1 i = 1
Šī programma ir līdzīga iepriekšējai.
Vienīgā atšķirība ir tā, ka operatora funkcijas atgriešanās veids ir Pārbaudīt šajā gadījumā, kas ļauj izmantot abus kodus ++obj;
obj1 = ++obj;
. Tas ir tāpēc, ka temperatūra, kas atgriezta no operatora funkcijas, tiek saglabāta objekta obj.
Tā kā operatora funkcijas atgriešanās veids ir Pārbaudīt, objekta vērtību varat arī piešķirt citam objektam.
Ievērojiet, ka = (piešķiršanas operators) nav jāpārslogo, jo šis operators jau ir pārslogots C ++ bibliotēkā.
3. piemērs: Postfix pieaugums ++ Operatora pārslodze
Pieauguma operatora pārslodze līdz šim punktam ir taisnība tikai tad, ja to izmanto prefiksa formā.
Tas ir iepriekšējās programmas modifikācija, lai padarītu šo darbu gan ar prefiksu, gan pēc ar parakstu.
#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.