Increment ++ and Decrement - Operator Overloading in C ++ Programming

W tym przykładzie nauczysz się przeciążać operatory inkrementacji ++ i dekrementacji w C ++.

Aby zrozumieć ten przykład, powinieneś znać następujące tematy programowania w języku C ++:

  • Klasy i obiekty C ++
  • Konstruktory C ++
  • Przeciążanie operatorów C ++

W tym samouczku, operator inkrementacja ++ i dekrementacja - są przeciążane w najlepszy możliwy sposób, tj. Zwiększają wartość elementu członkowskiego danych o 1 if ++ operator działa na obiekcie i zmniejszają wartość elementu członkowskiego danych o 1 if - operator jest używany.

Przykład 1: przeciążenie operatora przyrostu prefiksu ++ bez zwracanego typu

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

Wynik

 i = 0 i = 1

Początkowo, gdy obiekt obj jest zadeklarowany, wartość elementu członkowskiego danych i dla obiektu obj wynosi 0 (konstruktor inicjuje i na 0).

Gdy operator ++ działa na obj, void operator++( )wywoływana jest funkcja operatora, która zwiększa wartość elementu członkowskiego danych i do 1.

Ten program nie jest kompletny w tym sensie, że nie możesz używać kodu:

 obj1 = ++ obj;

Dzieje się tak, ponieważ zwracany typ funkcji operatora w powyższym programie jest nieważny.

Oto mała modyfikacja powyższego programu, abyś mógł używać kodu obj1 = ++obj.

Przykład 2: Przeciążenie operatora przyrostu prefiksu ++ typem zwracanym

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

Wynik

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

Ten program jest podobny do powyższego.

Jedyną różnicą jest to, że zwracanym typem funkcji operatora jest w tym przypadku Check, co pozwala na użycie obu kodów ++obj; obj1 = ++obj;. Dzieje się tak, ponieważ temp zwracany z funkcji operatora jest przechowywany w obiekcie obj.

Ponieważ zwracanym typem funkcji operatora jest Check, można również przypisać wartość obj do innego obiektu.

Zauważ, że = (operator przypisania) nie musi być przeciążony, ponieważ ten operator jest już przeciążony w bibliotece C ++.

Przykład 3: Przeciążenie operatora przyrostka przyrostka ++

Przeciążanie operatora inkrementacji do tego momentu jest prawdziwe tylko wtedy, gdy jest używany w postaci prefiksu.

Jest to modyfikacja powyższego programu, aby działał zarówno dla postaci przedrostka, jak i postfiksu.

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

Interesujące artykuły...