Υπερφόρτωση Τελεστών

Σχετικά έγγραφα
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Στοιχειώδης προγραμματισμός σε C++

Υπερφόρτωση τελεστών

Δομημένος Προγραμματισμός

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Οντοκεντρικός Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Αντικειμενοστραφής Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Υπερφόρτωση τελεστών (operator(

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

Μεταβλητές. Έστω η μεταβλητή

5 &6. Τύποι δεδομένων, τελεστές και

Προγραμματισμός Ι (ΗΥ120)

διανύσματα - Πίνακες - Struct Στατικό διάνυσμα Είσοδος Έξοδος δεδομένων Συναρτήσεις Χειρισμός σφαλμάτων ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

ΔΕΟ 13 - Ποσοτικές Μέθοδοι: Επιχειρησιακά Μαθηματικά. Κεφάλαιο 1: Συναρτήσεις μιας μεταβλητής

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Πρόβλημα 29 / σελίδα 28

3 Αλληλεπίδραση Αντικειμένων

Αντικειµενοστραφής Προγραµµατισµός

Εισαγωγή στη γλώσσα προγραμματισμού C++14

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Προγραμματισμός Ι (HY120)

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στη γλώσσα προγραμματισμού C++

Προγραμματισμός I (Θ)

Βασικές έννοιες προγραμματισμού

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Δομημένος Προγραμματισμός (ΤΛ1006)

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι (HY120)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Προγραμματισμός ΙI (Θ)

Κλάσεις και αντικείμενα #include <iostream.h<

Μοντέλα και Τεχνικές Αξιολόγησης. Ενεργειακών και Περιβαλλοντικών Πολιτικών

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Δυαδικη παρασταση αριθμων και συμβολων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

Προγραμματισμός ΙI (Θ)

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Αντικειμενοστρεφής Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Περιεχόμενα. Πρόλογος... 21

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ. ΜΑΘΗΜΑ 2 ο. ΑΛΓΕΒΡΑ Boole ΛΟΓΙΚΑ ΚΥΚΛΩΜΑΤΑ

ΠΕΚ ΠΕΙΡΑΙΑ ΕΠΙΜΟΡΦΩΣΗ ΕΚΠ/ΚΩΝ ΠΕ19,20 ΗΜ/ΝΙΑ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

10-δικό δικό

Η γλώσσα προγραμματισμού C

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Πληροφορική 2. Γλώσσες Προγραμματισμού

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κεφάλαιο ΙII : Εργαστηριακές ασκήσεις που αφορούν εντολές ελέγχου της ροής ενός προγράµµατος.

Εισαγωγή στο Mathematica

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

Κεφ 2. Βασικές Έννοιες Αλγορίθμων

Προβλήματα που αφορούν εντολές ελέγχου της ροής ενός προγράμματος.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Διαδικαστικός Προγραμματισμός

Εισαγωγή στους πίνακες

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Transcript:

Υπερφόρτωση Τελεστών Υπερφόρτωση του τελεστή ανάθεσης τιμής (=) Υπερφόρτωση των αριθμητικών τελεστών (+, -, *, /) Υπερφόρτωση των αριθμητικών τελεστών ανάθεσης (+=, -=, *=, /=) Υπερφόρτωση των συσχετιστικών τελεστών (==) Υπερφόρτωση των τελεστών εισόδου-εξόδου (<< και >>) Τελεστές μετατροπής casting Υπερφόρτωση των τελεστών ++ και -- Υπερφόρτωση του τελεστή [] 1

Υπερφόρτωση Τελεστών H C++ υποστηρίζει ένα σύνολο τελεστών για τους ενσωματωμένους τύπους της. ίνει όμως και της δυνατότητα της υπερφόρτωσής τους ώστε να είναι δυνατή η χρήση τους και για τα αντικείμενα νέων κλάσεων. Οι παρακάτω τελεστές μπορούν να υπερφορτωθούν με ορισμούς από τον χρήστη: Μόνο οι τελεστές:?: ::. και.* δεν είναι δυνατόν να υπερφορτωθούν. Ένας δυαδικός τελεστής μπορεί να ορισθεί είτε Με μία συνάρτηση-μέλος η οποία δέχεται ένα όρισμα Με μία συνάρτηση η οποία δεν είναι μέλος της κλάσης και δέχεται δύο ορίσματα. Οι συναρτήσεις αυτές ονομάζονται φίλες (friend). Η φίλη συνάρτηση είναι μια συνάρτηση που δεν είναι μέλος αλλά της παρέχεται πρόσβαση σε όλα τα μέλη της κλάσης στην οποία δηλώνεται Ακολουθούν βασικά παραδείγματα υπερφόρτωσης των συνηθέστερων τελεστών. 2

Υπερφόρτωση του τελεστή ανάθεσης τιμής Στο παράδειγμά μας βλέπουμε πως μπορούμε να υπερφορτώσουμε τον τελεστή ανάθεσης τιμής =. Σημειώνουμε τα ακόλουθα: Παρατηρείστε το όνομα της νέας συνάρτησης operator= Ο δείκτης *this αναφέρεται στο τρέχον αντικείμενο. Επιστρεφόμενος τύπος είναι αναφορά σε ένα αντικείμενο της ίδιας κλάσης. Έτσι λειτουργεί και η αλυσιδωτή ανάθεση πχ. z=y=x; 3

Υπερφόρτωση των αριθμητικών τελεστών Η υπερφόρτωση των αριθμητικών τελεστών (+, -, *, /) μπορεί να γίνει όπως στο διπλανό παράδειγμα. Στο συγκεκριμένο παράδειγμα γίνεται η υπερφόρτωση του τελεστή πρόσθεσης χρησιμοποιώντας συνάρτηση-μέλος της κλάσης. Αυτή η υλοποίηση έχει προβλήματα!! Όπως βλέπουμε υλοποιούνται οι προσθέσεις z=x+y; (Προσοχή αλλάζει και η τιμή του x!!) w=y+1; Εάν επίσης προσπαθήσουμε την πράξη: w=1+x; η μεταγλώττιση δεν είναι δυνατή γιατί απλά ο τελεστής + τώρα αφορά πρόσθεση ακεραίων αριθμών! Για να ξεπεράσουμε τα προβλήματα επιβάλλεται η χρήση φίλης συνάρτησης όπως στην επόμενη σελίδα. 4

Υπερφόρτωση των αριθμητικών τελεστών Η υπερφόρτωση των αριθμητικών τελεστών (+, -, *, /) μπορεί να γίνει εύκολα με χρήση φίλων (friend) συναρτήσεων όπως στο διπλανό παράδειγμα. Παρατηρείστε πως οι πράξεις: z=x+y; w=x+1; m=1+x; γίνονται όλες κανονικά. 5

Υπερφόρτωση των αριθμητικών τελεστών ανάθεσης Η C++ μας επιτρέπει να συνδυάζουμε αριθμητικές πράξεις με τον τελεστή ανάθεσης. Οι αριθμητικοί τελεστές ανάθεσης (+=, -=, *=, /=) μπορούν να υπερφορτωθούν όπως στο διπλανό παράδειγμα χρησιμοποιώντας συναρτήσειςμέλη της κλάσης. 6

Υπερφόρτωση των συσχετιστικών τελεστών Οι συσχετιστικοί τελεστές ανάθεσης (<, >, <=, >=, ==, και!=) μπορούν να υπερφορτωθούν με τον ίδιο τρόπο που υπερφορτώνονται οι αριθμητικοί τελεστές, ως φίλες (friend) συναρτήσεις. Στο διπλανό παράδειγμα υπερφορτώνεται ο τελεστής ισότητας ==. 7

Υπερφόρτωση των τελεστών εξόδου-εισόδου Η C++ επιτρέπει την υπερφόρτωση των τελεστών εξόδου >> και εισόδου <<. Γίνεται χρήση των κλάσεων ostream και istream. Στο διπλανό παράδειγμα υπερφορτώνεται ο τελεστής εξόδου >>. Παρατηρείστε πόσο απλά μπορεί να γίνει η εκτύπωση ενός αντικειμένου. 8

Υπερφόρτωση των τελεστών εισόδου-εξόδου Στο διπλανό παράδειγμα υπερφορτώνεται τόσο ο τελεστής εξόδου >> όσο και ο τελεστής εισόδου. 9

Τελεστές μετατροπής (casting) Για τη μετατροπή από τον τύπο της δεδομένης κλάσης σε άλλο τύπο, είναι απαραίτητη μια διαφορετική συνάρτησημέλος η οποία ονομάζεται τελεστής μετατροπής (conversion operator). Στο διπλανό παράδειγμα γίνεται η μετατροπή των αντικειμένων Ratio σε μεταβλητές τύπου double. 10

Υπερφόρτωση των τελεστών ++ και -- Ο τελεστής βηματικής αύξησης ++ και μείωσης -- έχουν δύο μορφές ο καθένας: προθεματική και μεταθεματική. Στο διπλανό παράδειγμα εικονίζεται ο τρόπος σύνταξης για την υπερφόρτωση του τελεστή ++ (τόσο προθεματική όσο και μεταθεματική). 11

Υπερφόρτωση του τελεστή [] Το σύμβολο [] υποδηλώνει τον τελεστή αριθμοδείκτη (subscript operator). Το όνομά του προέρχεται από την αρχική χρήση των πινλακων, όπου a[i] αντιπροσωπεύει το μαθηματικό σύμβολο a i. Στο διπλανό παράδειγμα εικονίζεται ο τρόπος σύνταξης για την προσθήκη του τελεστή αριθμοδείκτη στην κλάση. 12

Παράδειγμα 1 Αναπτύξτε μια κλάση η οποία αντιπροσωπεύει πρόσωπα. 13

Παράδειγμα 2 Αναπτύξτε μια κλάση η οποία αντιπροσωπεύει ημερομηνίες. 14

Παράδειγμα 2 15