Αύξηση ++ και Μείωση - Υπερφόρτωση χειριστή στον Προγραμματισμό C ++

Σε αυτό το παράδειγμα, θα μάθετε να υπερφορτώνετε αύξηση ++ και μείωση - χειριστές στο C ++.

Για να κατανοήσετε αυτό το παράδειγμα, θα πρέπει να γνωρίζετε τις ακόλουθες θεματολογίες προγραμματισμού C ++:

  • Μαθήματα και αντικείμενα C ++
  • Κατασκευαστές C ++
  • Υπερφόρτωση χειριστή C ++

Σε αυτό το σεμινάριο, αύξηση ++ και μειώσεις - ο χειριστής υπερφορτώνεται με τον καλύτερο δυνατό τρόπο, δηλαδή, αυξήστε την τιμή ενός μέλους δεδομένων κατά 1 εάν ο χειριστής ++ λειτουργεί σε ένα αντικείμενο και μειώστε την τιμή του μέλους δεδομένων κατά 1 εάν - χειριστής χρησιμοποιείται.

Παράδειγμα 1: Πρόθεμα ++ Υπερφόρτωση χειριστή αύξησης χωρίς τύπο επιστροφής

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

Παραγωγή

 i = 0 i = 1

Αρχικά όταν το αντικείμενο obj δηλώνεται, η τιμή του μέλους i για το αντικείμενο obj είναι 0 (ο κατασκευαστής αρχικοποιεί το i έως το 0).

Όταν ο χειριστής ++ λειτουργεί σε obj, ενεργοποιείται η λειτουργία χειριστή void operator++( ), η οποία αυξάνει την τιμή του μέλους δεδομένων i σε 1.

Αυτό το πρόγραμμα δεν είναι πλήρες υπό την έννοια ότι δεν μπορείτε να χρησιμοποιήσετε κώδικα:

 obj1 = ++ obj;

Είναι επειδή ο τύπος επιστροφής της λειτουργίας χειριστή στο παραπάνω πρόγραμμα είναι άκυρος.

Εδώ είναι η μικρή τροποποίηση του παραπάνω προγράμματος, ώστε να μπορείτε να χρησιμοποιήσετε κώδικα obj1 = ++obj.

Παράδειγμα 2: Υπερφόρτωση χειριστή Prefix Increment ++ με τύπο επιστροφής

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

Παραγωγή

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

Αυτό το πρόγραμμα είναι παρόμοιο με το παραπάνω.

Η μόνη διαφορά είναι ότι, ο τύπος επιστροφής της λειτουργίας χειριστή είναι Έλεγχος σε αυτήν την περίπτωση που επιτρέπει τη χρήση και των δύο κωδικών ++obj; obj1 = ++obj;. Αυτό συμβαίνει επειδή, η θερμοκρασία που επιστρέφεται από τη λειτουργία χειριστή αποθηκεύεται στο αντικείμενο obj.

Δεδομένου ότι, ο τύπος επιστροφής της λειτουργίας χειριστή είναι Έλεγχος, μπορείτε επίσης να αντιστοιχίσετε την τιμή του obj σε άλλο αντικείμενο.

Σημειώστε ότι, = (χειριστής ανάθεσης) δεν χρειάζεται να υπερφορτωθεί επειδή αυτός ο χειριστής είναι ήδη υπερφορτωμένος στη βιβλιοθήκη C ++.

Παράδειγμα 3: Υπερφόρτωση χειριστή Postfix Increment ++

Η υπερφόρτωση του χειριστή αύξησης έως αυτό το σημείο ισχύει μόνο εάν χρησιμοποιείται σε μορφή προθέματος.

Αυτή είναι η τροποποίηση του παραπάνω προγράμματος για να γίνει αυτό τόσο για φόρμα προθέματος όσο και για φόρμα μετά την επιδιόρθωση.

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

ενδιαφέροντα άρθρα...