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