Increment ++ och Decrement - Operatörsöverbelastning i C ++ programmering

I det här exemplet lär du dig att överbelasta inkrement ++ och decrement - operatorer i C ++.

För att förstå detta exempel bör du ha kunskap om följande C ++ programmeringsämnen:

  • C ++ klasser och objekt
  • C ++ konstruktörer
  • C ++ överbelastning av operatören

I den här självstudien överbelastas inkrement ++ och decrements - operator på bästa möjliga sätt, dvs. öka värdet på en datamedlem med 1 om ++ operatör arbetar på ett objekt och minska värdet på datamedlem med 1 if - operator är använd.

Exempel 1: Prefix ++ Increment Operator Overloading utan returtyp

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

Produktion

 i = 0 i = 1

Initialt när objektobjektet deklareras är värdet på datamedlem i för objektobjekt 0 (konstruktorn initialiserar i till 0).

När ++ -operatören drivs på obj anropas operatörsfunktionen void operator++( )som ökar värdet på datamedlem i till 1.

Detta program är inte komplett i den meningen att du inte kan använda kod:

 obj1 = ++ obj;

Det beror på att returtypen för operatörsfunktion i ovanstående program är ogiltig.

Här är den lilla modifieringen av ovanstående program så att du kan använda kod obj1 = ++obj.

Exempel 2: Prefix Increment ++ -operatörsöverbelastning med returtyp

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

Produktion

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

Detta program liknar det ovan.

Den enda skillnaden är att operatörsfunktionen för returtyp är Kontrollera i det här fallet som gör det möjligt att använda båda koder ++obj; obj1 = ++obj;. Det beror på att temp som returneras från operatörsfunktionen lagras i objektobjekt.

Eftersom operatörsfunktionens returtyp är Kontroll, kan du också tilldela värdet på obj till ett annat objekt.

Observera att = (tilldelningsoperatören) inte behöver överbelastas eftersom den här operatören redan är överbelastad i C ++ - biblioteket.

Exempel 3: Postfix Increment ++ Operator Overloading

Överbelastning av inkrementoperatören fram till denna punkt gäller endast om den används i prefixform.

Detta är modifieringen av ovanstående program för att detta ska fungera både för prefixform och postfixform.

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

Intressanta artiklar...