Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί Ενότητας Κατανόηση της έννοιας της Υπερφόρτωσης τελεστών και των Χώρων ονομάτων (namespaces) 4
Περιεχόμενα Υπερφόρτωση τελεστών Παραδείγματα Χώροι ονομάτων (namespaces) 5
Υπερφόρτωση μονομελών τελεστών Υπερφόρτωση του τελεστή ανάθεσης = O τελεστής = μπορεί να χρησιμοποιηθεί για την ακριβή, bit-προς-bit, αντιγραφή ενός αντικειμένου σε άλλο. Τα αντικείμενα πρέπει να ανήκουν στην ίδια κλάση. Είναι προβληματική αν τα αντικείμενα δεσμεύουν δυναμικά μνήμη. Τότε πρέπει να τον υπερφορτώσουμε, ώστε να μην λειτουργήσει με τον προκαθορισμένο τρόπο. 6
Υπερφόρτωση του τελεστή (). Με την υπερφόρτωση αυτού του τελεστή δεν αλλάζει ο τρόπος κλήσης των συναρτήσεων. Με αυτόν όμως μπορούμε να αναφερόμαστε σε αντικείμενα, περνώντας τους τιμές και εφαρμόζοντας πάνω τους πράξεις, σαν να ήταν συναρτήσεις. 7
Υπερφόρτωση του τελεστή [] Τυπικά αυτός ο τελεστής δίνει προσπέλαση στα στοιχεία ενός πίνακα. Μπορεί να υπερφορτωθεί ώστε να δίνει προσπέλαση σε μεταβλητές-μέλη κλάσης. Δεν είναι απαραίτητο αυτές οι μεταβλητές-μέλη να ανήκουν σε πίνακα. 8
Χώροι ονομάτων (namespaces) (1) Ένας χώρος ονομάτων είναι μια εμβέλεια, δηλαδή ένας χώρος μέσα σε ένα πρόγραμμα στον οποίο ισχύουν κάποιες μεταβλητές ή συναρτήσεις, κλπ. Ένας χώρος ονομάτων περιέχει «πακεταρισμένες» δηλώσεις μεταβλητών, σταθερών και συναρτήσεων, κλάσεων, αντικειμένων, όλα κάτω από ένα όνομα. 9
Χώροι ονομάτων (namespaces) (2) Μπορούμε να χρησιμοποιήσουμε σε ένα πρόγραμμα όλο τον χώρο ονομάτων ή τμήμα του, εύκολα. Για να κάνουμε διαθέσιμα τα ονόματα που δηλώθηκαν μέσα σε ένα namespace έχουμε 2 τρόπους: Να χρησιμοποιήσουμε τον τελεστή επίλυσης εμβέλειας διπλή άνω-κάτω τελεία (::) ή να χρησιμοποιήσουμε το using. Ο ορισμός ενός χώρου ονομάτων γίνεται μία φορά, αλλά μπορούμε να προσθέσουμε νέα στοιχεία σε αυτόν στη συνέχεια. 10
Χώροι ονομάτων (namespaces) (3) Σύμφωνα με το standard της C++, καταργείται η σύμβαση τα αρχεία επικεφαλίδας της standard βιβλιοθήκης να έχουν κατάληξη.h και όλα τα ονόματα που ορίζονται ή δηλώνονται από αυτή να βρίσκονται μέσα σε ένα namespace που ονομάζεται std. Φωλιασμένοι χώροι ονομάτων: Επιτρέπεται η δημιουργία ενός χώρου ονομάτων μέσα σε έναν άλλο. 11
Βιβλιογραφία Δημήτρης Συνδουκάς 2007, Αντικειμενοστρεφής προγραμματισμός με C++ - Ασκήσεις, Εσωτερική έκδοση του ΤΕΙ Νίκος Μ. Χατζηγιαννάκης 2008, Η Γλώσσα C++ σε βάθος (1η έκδοση), ΚΛΕΙΔΑΡΙΘΜΟΣ ΕΠΕ, Αθήνα [ISBN: 978-960-461-143-0] Walter Savitch. 2011, Πλήρης C++ (1η έκδοση), Α. ΤΖΙΟΛΑ & ΥΙΟΙ Ο.Ε., Αθήνα, [ISBN: 978-960-418-358-6] Herbert Schildt 2005, C++ Βήμα προς Βήμα (2η έκδοση), Α. ΤΖΙΟΛΑ & ΥΙΟΙ Ο.Ε., Αθήνα, [ISBN: 960-512-449-1] Harvey M.Deitel, Paul J. Deitel, 2011, C++ Προγραμματισμός (6η έκδοση), Γκιούρδας Μ., Αθήνα, [ISBN: 978-960-512-5912] Jesse Liberty 2006, Πλήρες Εγχειρίδιο της C++ (Πέμπτη έκδοση), Γκιούρδας Μ., Αθήνα, [ISBN: 978-960-512-318-5] Deitel Paul J.,Deitel Harvey M., Java Προγραμματισμός, 8 η έκδοση, Εκδόσεις Χ. Γκιούρδα και ΣΙΑ, 2008, ISBN: 978-960-512-592-9. Savitch Walter, Java, 4 η έκδοση, 2007, Εκδόσεις Α. Τζιόλα και Υιοί, ISBN: 978-960-418-147-6. 12
Τέλος Ενότητας
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 14
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 15