Prieaugis ++ ir mažinimas - operatoriaus perkrova programuojant C ++

Šiame pavyzdyje sužinosite perkrauti padidėjimo ++ ir mažinimo - operatorius C ++.

Norėdami suprasti šį pavyzdį, turėtumėte žinoti šias C ++ programavimo temas:

  • C ++ klasės ir objektai
  • C ++ konstruktoriai
  • C ++ operatoriaus perkrova

Šioje pamokoje padidėjimas ++ ir mažinimas - operatorius perkraunamas geriausiu įmanomu būdu, ty padidinkite duomenų nario vertę 1, jei ++ operatorius veikia su objektu, ir sumažinkite duomenų nario vertę 1, jei - operatorius yra naudojamas.

1 pavyzdys: Prefiksas ++ Operatoriaus prieaugis Perkrovimas be grąžinimo tipo

 #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; )

Rezultatas

 i = 0 i = 1

Iš pradžių, kai deklaruojamas objekto obj objektas, duomenų objekto objekto obj vertė yra 0 (konstruktorius inicializuoja i į 0).

Kai ++ operatorius valdomas obj, void operator++( )iškviečiama operatoriaus funkcija , kuri padidina duomenų nario i vertę iki 1.

Ši programa nėra baigta ta prasme, kad negalite naudoti kodo:

 obj1 = ++ obj;

Taip yra todėl, kad pirmiau nurodytos programos operatoriaus funkcijos grąžinimo tipas negalioja.

Čia yra nedidelis aukščiau nurodytos programos pakeitimas, kad galėtumėte naudoti kodą obj1 = ++obj.

2 pavyzdys: priešdėlis „Increment ++“ operatoriaus perkrovimas su grąžinimo tipu

 #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; )

Rezultatas

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

Ši programa yra panaši į aukščiau pateiktą.

Vienintelis skirtumas yra tas, kad operatoriaus funkcijos grąžinimo tipas yra „Check“ šiuo atveju, kuris leidžia naudoti abu kodus ++obj; obj1 = ++obj;. Taip yra todėl, kad temperatūra, grąžinta iš operatoriaus funkcijos, yra saugoma obj obj.

Kadangi operatoriaus funkcijos grąžinimo tipas yra „Check“, objekto vertę taip pat galite priskirti kitam objektui.

Atkreipkite dėmesį, kad = (priskyrimo operatoriaus) nereikia perkrauti, nes šis operatorius jau perkrautas C ++ bibliotekoje.

3 pavyzdys: „Postfix“ prieaugis ++ Operatoriaus perkrova

Perkrovos prieaugio operatorius iki šio taško yra teisingas tik tuo atveju, jei jis naudojamas priešdėlio forma.

Tai yra pirmiau minėtos programos modifikacija, kad šis darbas veiktų ir priešdėlio formos, ir postfikso formoje.

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

Įdomios straipsniai...