Increment ++ in Decrement - Preobremenitev operaterja pri programiranju na C ++

V tem primeru se boste naučili preobremeniti operatorje inkrementa ++ in dekrementacije v C ++.

Če želite razumeti ta primer, morate poznati naslednje programske teme C ++:

  • C ++ razredi in predmeti
  • Konstruktorji C ++
  • Preobremenitev operaterja C ++

V tej vadnici je inkrement ++ in decrements - operator preobremenjen na najboljši možen način, tj. Povečati vrednost podatkovnega člana za 1, če operater ++ deluje na objektu in zmanjšati vrednost podatkovnega člana za 1 if - operator se uporablja.

Primer 1: Preobremenitev operaterja prirastka ++ Preobremenitev brez vrste vrnitve

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

Izhod

 i = 0 i = 1

Ko je objekt obj deklariran, je vrednost podatkovnega člana i za objekt obj 0 (konstruktor inicializira i na 0).

Ko operater ++ deluje na obj, void operator++( )se prikliče operacijska funkcija , ki poveča vrednost podatkovnega člana i na 1.

Ta program ni popoln v smislu, da ne morete uporabiti kode:

 obj1 = ++ obj;

To je zato, ker je vrnjena vrsta operacijske funkcije v zgornjem programu nična.

Tu je nekaj sprememb zgornjega programa, tako da lahko uporabljate kodo obj1 = ++obj.

Primer 2: Preobremenitev operaterja Increment ++ s predpono z vrnitvijo

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

Izhod

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

Ta program je podoben zgornjemu.

Edina razlika je v tem, da je v tem primeru funkcija vrnitve operatorja funkcija Check, ki omogoča uporabo obeh kod ++obj; obj1 = ++obj;. To je zato, ker se temp, vrnjena iz funkcije operaterja, shrani v objekt obj.

Ker je vrsta vrnitve funkcije operatorja Check, lahko vrednosti obj dodelite tudi drugemu objektu.

Upoštevajte, da = (operator dodelitve) ni treba preobremeniti, ker je ta operater že preobremenjen v knjižnici C ++.

Primer 3: Postfix Increment ++ Operator Overloading

Preobremenitev operatorja prirastka do te točke velja le, če se uporablja v obliki predpone.

To je sprememba zgornjega programa, da bo to delovalo tako za predpono kot za obliko predpone.

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

Zanimive Članki...