Increment ++ i Decrement - Preopterećenje operatora u programiranju na C ++

U ovom ćete primjeru naučiti preopteretiti operatore prirasta ++ i decrement - u C ++.

Da biste razumjeli ovaj primjer, trebali biste imati znanje o sljedećim temama programiranja na C ++:

  • C ++ klase i objekti
  • Konstruktori C ++
  • Preopterećenje operatora C ++

U ovom vodiču inkrement ++ i dekrementi - operator preopterećeni su na najbolji mogući način, tj. Povećati vrijednost člana podataka za 1 ako ++ operator operira na objektu i smanjiti vrijednost člana podataka za 1 if - operator koristi se.

Primjer 1: Preopterećenje operatora povećanja prefiksa ++ bez tipa povratka

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

Izlaz

 i = 0 i = 1

U početku kada se deklarira objekt obj, vrijednost člana podataka i za objekt obj je 0 (konstruktor inicijalizira i na 0).

Kada se ++ operatorom upravlja na obj, void operator++( )poziva se funkcija operatora koja povećava vrijednost člana podataka i na 1.

Ovaj program nije potpun u smislu da ne možete koristiti upotrijebljeni kôd:

 obj1 = ++ obj;

To je zato što je vrsta povrata funkcije operatora u gore navedenom programu nevažeća.

Evo male preinake gornjeg programa kako biste mogli koristiti kod obj1 = ++obj.

Primjer 2: Preopterećenje operatora Increment ++ prefiksa s tipom povratka

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

Izlaz

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

Ovaj je program sličan onome gore.

Jedina je razlika u tome što je povratna vrsta funkcije operatora Check u ovom slučaju koja omogućuje upotrebu oba koda ++obj; obj1 = ++obj;. To je zato što se temp vraćena iz funkcije operatora pohranjuje u objekt obj.

Budući da je povratna vrsta funkcije operatora Check, također možete dodijeliti vrijednost obj drugom objektu.

Primijetite da = (operator dodjele) ne treba preopteretiti jer je ovaj operator već preopterećen u knjižnici C ++.

Primjer 3: Postfix Increment ++ Operator Overloading

Preopterećenje operatora priraštaja do ove točke vrijedi samo ako se koristi u obliku prefiksa.

Ovo je modifikacija gornjeg programa kako bi ovo djelovalo i na prefiksni i na postfiksni oblik.

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

Zanimljivi članci...