Increment ++ og Decrement - Overbelastning av operatører i C ++ programmering

I dette eksemplet lærer du å overbelaste inkrement ++ og decrement - operatorer i C ++.

For å forstå dette eksemplet, bør du ha kunnskap om følgende C ++ programmeringsemner:

  • C ++ klasser og gjenstander
  • C ++ konstruksjoner
  • C ++ Overbelastning av operatør

I denne opplæringen overbelastes inkrement ++ og decrements - operator på best mulig måte, dvs. øker verdien til et data medlem med 1 hvis ++ operator opererer på et objekt og reduserer verdien av data medlem med 1 if - operator benyttes.

Eksempel 1: Prefiks ++ Increment Operator Overloading uten returtype

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

Produksjon

 i = 0 i = 1

Opprinnelig når objektet objekt er erklært, er verdien av data-medlem i for objekt obj 0 (konstruktøren initialiserer jeg til 0).

Når ++ operatør opereres på obj, blir operatørfunksjon void operator++( )påkalt som øker verdien av datamedlem i til 1.

Dette programmet er ikke komplett i den forstand at du ikke kan bruke kode:

 obj1 = ++ obj;

Det er fordi returtypen for operatørfunksjonen i programmet ovenfor er ugyldig.

Her er den lille modifikasjonen av ovennevnte program, slik at du kan bruke kode obj1 = ++obj.

Eksempel 2: Prefiks Increment ++ -operatøroverbelastning med returtype

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

Produksjon

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

Dette programmet ligner på det ovenfor.

Den eneste forskjellen er at returtypen for operatørfunksjonen er Kontroller i dette tilfellet som gjør det mulig å bruke begge kodene ++obj; obj1 = ++obj;. Det er fordi, temp returnert fra operatørfunksjonen er lagret i objekt obj.

Siden returtypen for operatørfunksjonen er Sjekk, kan du også tilordne verdien til obj til et annet objekt.

Legg merke til at = (oppdragsoperatør) ikke trenger å bli overbelastet fordi denne operatøren allerede er overbelastet i C ++ - biblioteket.

Eksempel 3: Postfix Increment ++ Operatør Overbelastning

Overbelastning av trinnoperatøren til dette punktet gjelder bare hvis den brukes i prefiksform.

Dette er modifiseringen av ovennevnte program for å få dette til å fungere både for prefiksform og postfiksform.

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

Interessante artikler...