Lisäys ++ ja vähennys - käyttäjän ylikuormitus C ++ -ohjelmoinnissa

Tässä esimerkissä opit ylikuormittamaan lisäyksiä ++ ja vähennyksiä - operaattoreita C ++: ssa.

Tämän esimerkin ymmärtämiseksi sinulla on oltava tieto seuraavista C ++ -ohjelmointiaiheista:

  • C ++ -luokat ja -esineet
  • C ++ -rakentajat
  • C ++ - käyttäjän ylikuormitus

Tässä opetusohjelmassa inkrementti ++ ja vähennykset - operaattori ylikuormitetaan parhaalla mahdollisella tavalla, eli lisää datajäsenen arvoa yhdellä, jos ++ -operaattori toimii objektilla, ja pienennä datajäsenen arvoa yhdellä, jos - operaattori käytetään.

Esimerkki 1: Etuliite ++ Operaattorin lisäys Ylikuormitus ilman palautustyyppiä

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

Tuotos

 i = 0 i = 1

Alun perin kun objekti obj ilmoitetaan, dataobjektin i arvo objektille obj on 0 (konstruktori alustaa i arvoksi 0).

Kun ++ -operaattoria käytetään obj: lla, käytetään operaattoritoimintoa void operator++( ), joka kasvattaa datajäsenen i arvoon 1.

Tämä ohjelma ei ole täydellinen siinä mielessä, että et voi käyttää koodia:

 obj1 = ++ obj;

Tämä johtuu siitä, että yllä olevan ohjelman operaattorin palautustyyppi on mitätön.

Tässä on pieni muutos yllä olevaan ohjelmaan, jotta voit käyttää koodia obj1 = ++obj.

Esimerkki 2: Etuliite Increment ++ - operaattorin ylikuormitus palautustyypillä

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

Tuotos

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

Tämä ohjelma on samanlainen kuin yllä.

Ainoa ero on, että operaattorin palautustyyppi on Check tässä tapauksessa, joka sallii molempien koodien käytön ++obj; obj1 = ++obj;. Tämä johtuu siitä, että operaattoritoiminnosta palautettu lämpötila tallennetaan objektin obj.

Koska operaattorin funktion palautustyyppi on Tarkista, voit myös määrittää obj-arvon toiselle objektille.

Huomaa, että = (tehtäväoperaattoria) ei tarvitse ylikuormittaa, koska tämä operaattori on jo ylikuormitettu C ++ -kirjastossa.

Esimerkki 3: Postfix-lisäys ++ Operaattorin ylikuormitus

Lisäoperaattorin ylikuormitus tähän pisteeseen on totta vain, jos sitä käytetään etuliitteen muodossa.

Tämä on yllä olevan ohjelman muunnos, jotta tämä toimisi sekä etuliite- että jälkiliitemuodossa.

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

Mielenkiintoisia artikkeleita...