Inkrement ++ ja Decrement - operaatori ülekoormamine C ++ programmeerimisel

Selles näites saate õppida suurendama ++ ja decrement - operaatoreid C ++ keeles.

Selle näite mõistmiseks peaksid teil olema teadmised järgmistest C ++ programmeerimise teemadest:

  • C ++ klassid ja objektid
  • C ++ konstruktorid
  • C ++ operaatori ülekoormus

Selles õpetuses on ++ ja decrements - operaator parimal võimalikul viisil ülekoormatud, st suurendage andmeeliikme väärtust 1 võrra, kui ++ operaator töötab objektil, ja vähendage andmeliikme väärtust 1 kui kasutatakse.

Näide 1: eesliide ++ Operaatori juurdekasv ilma tagasitüübita

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

Väljund

 i = 0 i = 1

Esialgu objekti obj deklareerimisel on objekti obj andmeliik i väärtus 0 (konstruktor lähtestab i väärtuseks 0).

Kui ++ operaatorit opereeritakse objektil, void operator++( )käivitatakse operaatori funktsioon, mis suurendab andmeliigi i väärtust 1-ni.

See programm ei ole täielik selles mõttes, et te ei saa koodi kasutada:

 obj1 = ++ obj;

Selle põhjuseks on asjaolu, et ülaltoodud programmi operaatori funktsiooni return tüüp on tühine.

Siin on ülaltoodud programmi väike modifikatsioon, et saaksite koodi kasutada obj1 = ++obj.

Näide 2: Eesliide Increment ++ operaatori ülekoormamine tagastustüübiga

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

Väljund

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

See programm sarnaneb ülaltooduga.

Ainus erinevus on see, et sel juhul on operaatori funktsiooni tagasitüüp Check, mis võimaldab kasutada mõlemat koodi ++obj; obj1 = ++obj;. Sellepärast, et operaatori funktsioonist tagastatud temp salvestatakse objekti obj.

Kuna operaatori funktsiooni return tüüp on Check, saate objekti objekti väärtuse määrata ka teisele objektile.

Pange tähele, et = (määranguoperaator) ei pea üle koormama, kuna see operaator on C ++ teegis juba ülekoormatud.

Näide 3: Postfixi juurdekasv ++ Operaatori ülekoormus

Kasvuoperaatori ülekoormamine kuni selle punktini on tõene ainult siis, kui seda kasutatakse eesliite kujul.

See on ülaltoodud programmi modifikatsioon, et see toimiks nii ees- kui ka järellainevormi puhul.

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

Huvitavad Artiklid...