Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 7: Υπερφόρτωση διμελών τελεστών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Αντικειμενοστραφής Προγραμματισμός Διάλεξη 7
Περιεχόμενα Υπερφόρτωση διμελών τελεστών Παράδειγμα χρήσης κλάσης
Υπερφόρτωση Διμελών τελεστών Μέχρι τώρα είδαμε την υπερφόρτωση σε μονομελείς τελεστές (++,--) Οι διμελείς τελεστές μπορούν να υπερφορτωθούν το ίδιο εύκολα Στο παράδειγμα με την κλάση Counter θα επιθυμούσαμε να μπορούμε να γράψουμε την παράσταση c3 = c1 + c2 Για να συμβεί αυτό θα πρέπει να υπερφορτώσουμε τον τελεστή +
Υπερφόρτωση Διμελών τελεστών class Counter{ public: Counter(); Counter(int a); ~Counter(); int get_count(); void set_count(int a); Counter operator++(); Counter operator++(int); Counter operator+(counter f) const; private: int count; };
Υπερφόρτωση Διμελών τελεστών Counter Counter::operator+(Counter c1) const { int cc = count + c1.count; return Counter(cc); }
Υπερφόρτωση Διμελών τελεστών int main() { Counter c1,c2,c3; } c1.set_count(0); cout<<"counter Value:"<<c1.get_count()<<endl; c2 = ++c1; cout<<"counter Value (c2):"<<c2.get_count()<<endl; cout<<"counter Value (c1):"<<c1.get_count()<<endl; c3 = c1 + c2; cout<<"counter Value (c3):"<<c3.get_count()<<endl; return 0;
Υπερφόρτωση Διμελών τελεστών Στην παράσταση c3 = c1 + c2 ο μεταγλωτιστής εξετάζει τον τύπο τον ορισμάτων και βρίσκοντας μόνο αντικείμενα τύπου Counter αντιλαμβάνεται ότι πρέπει να χρησιμοποιήσει τη μέθοδο operator+() της κλάσης Counter. Όμως τι χρησιμοποιεί ως όρισμα στη συνάρτηση; Θα καλέσει τη μέθοδο του αντικειμένου c1 ή του c2; Το αντικείμενο στα αριστερά του τελεστή είναι το αντικείμενο όπου ο τελεστής είναι μέλος. Το αντικείμενο στα δεξιά θα περάσει ως όρισμα στη μέθοδο Γενίκευση: ένας υπερφορτωμένος τελεστής απαιτεί πάντα ένα όρισμα λιγότερο από τον αριθμό των τελεστέων
Υπερφόρτωση Διμελών τελεστών Αν θέλαμε να μπορούμε να γράφαμε παραστάσεις της μορφής c3>c1 ποιον τελεστή θα υπερφορτώναμε; Αν θέλαμε να μπορούμε να γράφαμε παραστάσεις της μορφής c3==c1 ποιον τελεστή θα υπερφορτώναμε;
Παράδειγμα Στο παρακάτω πρόγραμμα σας ζητήτε να υλοποιήσετε μια κλάση που θα αναφέρεται στην έννοια των μιγαδικών αριθμών (complex numbers). Ένας μιγαδικός αριθμός χαρακτηρίζεται από τον πραγματικό και φανταστικό μέρος του. Το πραγματικό και φανταστικό μέρος είναι οι ιδιότητες του μιγαδικού αριθμόυ και θα αποτελούν τα ιδιωτικά μέλη της κλάσης Complex που θα ορίσετε.
Παράδειγμα Θα πρέπει να υλοποιήσετε τις παρακάτω συναρτήσεις της κλάσης Complex: 1. Συναρτήσεις Δημιουργίας με 0 ή 2 ορίσματα. Στην περίπτωση που δεν υπάρχουν ορίσματα θα δώσετε τις τιμές 0 για το πραγματικό και φανταστικό μέρος του μιγαδικού αριθμού. 2. Συναρτήσεις πρόσβασης για τα ιδιωτικά μέλη της κλάσης. 3. Υπερφόρτωση του τελεστή + (operator+) που θα προσθέτει 2 αντικείμενα τύπου Complex.
Παράδειγμα Στην main συνάρτηση θα δημιουργήσετε 2 αντικείμενα τύπου Complex, θα δώσετε τιμές σε αυτά μέσω των συναρτήσεων δημιουργίας. Έπειτα θα εμφανίσεται στην οθόνη το πραγματικό και φανταστικό μέρος του κάθε μιγαδικού στην μορφή {Pragmatiko:<τιμή πραγματικού μέρους>, Fantastiko:<τιμή φαντστικού μέρους>}. Η εμφάνιση των τιμών θα γίνει με χρήση των συναρτήσεων πρόσβασης. Επίσης, θα εμφανίσετε στην οθόνη το αθροισμα των δυο αντικειμένων τύπου Complex, στην ίδια μορφή οπως προηγουμένως. Προσοχή στο πρόγραμμα σας ουσιαστικά θα δηλώσετε 3 αντικείμενα τύπου Complex, δύο που σας ζητούνται και ένα για να αποθηκεύσετε την πρόσθεση. Στο πρόγραμμα μας το πραγματικό και φανταστικό μέρος είναι ακέραιοι αριθμοί.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό. Οι όροι χρήσης των έργων τρίτων επεξηγούνται στη διαφάνεια «Επεξήγηση όρων χρήσης έργων τρίτων». Τα έργα για τα οποία έχει ζητηθεί άδεια αναφέρονται στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/από-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.
Επεξήγηση όρων χρήσης έργων τρίτων διαθέσιμο με άδεια CC-BY διαθέσιμο με άδεια CC-BY-SA διαθέσιμο με άδεια CC-BY-ND διαθέσιμο με άδεια CC-BY-NC διαθέσιμο με άδεια CC-BY-NC-SA διαθέσιμο με άδεια CC-BY-NC-ND διαθέσιμο με άδεια CC0 Public Domain διαθέσιμο ως κοινό κτήμα χωρίς σήμανση Δεν επιτρέπεται η επαναχρησιμοποίηση του έργου, παρά μόνο εάν ζητηθεί εκ νέου άδεια από το δημιουργό. Επιτρέπεται η επαναχρησιμοποίηση του έργου και η δημιουργία παραγώγων αυτού με απλή αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού, και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η δημιουργία παραγώγων του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου και η δημιουργία παραγώγων του. Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. Συνήθως δεν επιτρέπεται η επαναχρησιμοποίηση του έργου.
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.