Υπερφόρτωση τελεστών
|
|
- ᾍιδης Ζαχαρίου
- 6 χρόνια πριν
- Προβολές:
Transcript
1 Υπερφόρτωση τελεστών 19 Νοεμβρίου Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας κλάσης-τύπου όπως ακριβώς δηλώνουμε μεταβλητές των βασικών τύπων της γλώσσας. Η κλάση cplex για παράδειγμα υποθετικά αναπαριστά έναν μιγαδικό αριθμό. Με τα όσα είπαμε μέχρι στιγμής σχετικά με τον ορισμό μεθόδων, η μόνη μας εναλλακτική για να ορίσουμε την πρόσθεση μιγαδικών αριθμών είναι η μέθοδος add του παραδείγματος. Προφανώς, θα ήταν απλούστερο προκειμένου να προσθέσουμε δύο αντικείμενα αυτού του τύπου να γράφαμε a+b αντί για a.add(b). Η C++ δίνει τη δυνατότητα για κάτι τέτοιο μέσω του μηχανισμού υπερφόρτωσης τελεστών (operator overloading). Με αυτόν το μηχανισμό μπορούμε να ορίσουμε νέες σημασίες για ήδη υπάρχοντες τελεστές της γλώσσας, όπως π.χ. για τον τελεστή της πρόσθεσης +. Υπερφορτώνοντας τους τελεστές μπορούμε να αλλάξουμε τη σημασία τους αλλά όχι και το συντακτικό της γλώσσας, δηλαδή οι τελεστές π.χ. / και *= είναι δυαδικοί τελεστές, δηλαδή παίρνουν δύο ορίσματα ενώ ο τελεστής ++ είναι μοναδιαίος, δηλαδή παίρνει μόνο ένα. Για να υπερφορτώσουμε έναν τελεστή γράφουμε μία μέθοδο (δηλαδή μέσα στην κλάση) ή μία συνάρτηση (δηλαδή έξω από την κλάση) η οποία υλοποιεί τη νέα λειτουργία που θέλουμε να έχει ο τελεστής. Εφόσον μιλάμε για μεθόδους και συναρτήσεις θα πρέπει να ακολουθήσουμε το βασικό συντακτικό αυτών των σχημάτων της γλώσσας δηλαδή ένα σχήμα σαν το παρακάτω: 1 return_type method_function_name( parameter_list) 2 {... } όπου δηλαδή έχουμε ένα κομμάτι κώδικα μέσα σε άγκιστρα το οποίο καλείται με το όνομα method_function_name, παίρνει μια λίστα παραμέτρων parameter_list μέσα σε παρενθέσεις και επιστρέφει μία τιμή τύπου return_type (ή void). Κανονικά οι μέθοδοι ή οι συναρτήσεις που θα χρησιμοποιούσαμε για να υλοποιήσουμε τους υπερφορτωμένους τελεστές θα έπρεπε να παίρνουν τόσες παραμέτρους όσες και τα ορίσματα του τελεστή. Αν όμως χρησιμοποιήσουμε μία μέθοδο, δηλαδή μέσα στο σώμα της κλάσης, τότε το πρώτο όρισμα του τελεστή παραλείπεται και εννοείται ότι είναι το αντικείμενο για το οποίο καλείται ο τελεστής. Αν επιλέξουμε να δημιουργήσουμε μία συνάρτηση, δηλαδή έξω από την κλάση, πρέπει να αναφέρουμε και τα δύο ορίσματα. Οι μέθοδοι και οι συναρτήσεις που υπερφορτώνουν έναν τελεστή πρέπει προφανώς να έχουν ένα όνομα το οποίο να εμπεριέχει το όνομα του τελεστή. Καθώς όμως 1
2 οι τελεστές είναι σύμβολα τα οποία δεν επιτρέπεται να χρησιμοποιούνται σε ονόματα συναρτήσεων, προκειμένου να υπερφορτώσουμε έναν τελεστή, π.χ. το + γράφουμε ως όνομα της συνάρτησης ή μεθόδου υπερφόρτωσης τη δεσμευμένη λέξη operator ακολουθούμενη από το όνομα του τελεστή. Το ζήτημα του επιστρεφόμενου τύπου εξαρτάται από τη σημασιολογία που θέλουμε να δώσουμε στον υπερφορτωμένο τελεστή και θα δούμε σχετικά παραδείγματα στη συνέχεια. 2 Υπερφόρτωση δυαδικών τελεστών Οι δυαδικοί τελεστές παίρνουν δύο ορίσματα. Έτσι λοιπόν, σύμφωνα με την τελευταία παράγραφο της προηγούμενης ενότητας μπορούμε: Να υπερφορτώσουμε τέτοιους τελεστές γράφοντας μια μέθοδο με μία μόνο παράμετρο μέσα στο σώμα της κλάσης. Σε αυτήν την περίπτωση, ο πρώτος τελεστέος του δυαδικού τελεστή θεωρείται ότι είναι το αντικείμενο για το οποίο καλείται ο τελεστής ενώ ο δεύτερος τελεστέος είναι η μία και μοναδική παράμετρος της μεθόδου υπερφόρτωσης. Να τους υπερφορτώσουμε γράφοντας μία συνάρτηση εξω από το σώμα της κλάσης. Σε αυτήν την περίπτωση, πρέπει η συνάρτηση να παίρνει δύο παραμέτρους: η πρώτη είναι ο αριστερός τελεστέος του τελεστή ενώ η δεύτερη ο δεξιός. Τα παραπάνω θα γίνουν πιο σαφή με τα παρακάτω παραδείγματα. Θεωρήστε ότι έχουμε τη γνωστή κλάση cplex σε ένα πρόγραμμα όπως το παρακάτω: 1 # include <iostream > 2 using namespace std; 3 4 class cplex { 5 private: 6 float re, im; 7 8 public: 9 cplex() { re = im = 0; } 10 cplex( float _re, float _im) { re = _re; im = _im; } void print() { cout << "(" << re << ", " << im << "j)" << endl; } 13 void add( cplex b) { re += b. re; im += b. im; } 14 }; int main() 17 { 18 cplex a(3,4); 19 cplex b(2,5); 20 a.add(b); 21 a.print(); return 0; 2
3 24 } Στις γραμμές 4-14 έχουμε ορίσει την κλάση, με έναν constructor για να μπορούμε να δίνουμε αρχικές τιμές στα μέλη δεδομένων re και im και επίσης έχουμε ορίσει μία μέθοδο print για να μπορούμε να τυπώνουμε αντικείμενα αυτής της κλάσης. Αν δεν υπήρχε η δυνατότητα υπερφόρτωσης τελεστών και θέλαμε να γράψουμε μία μέθοδο η οποία να πρόσθετε σε ένα αντικείμενο ένα άλλο, θα έπρεπε να γράψουμε μία μέθοδο σαν τη μέθοδο add της γραμμής 13. Εκεί δηλώνουμε ότι αν καλέσουμε την μέθοδο add για ένα αντικείμενο με παράμετρο ένα άλλο, τότε στα μέλη δεδομένων του πρώτου αντικειμένου θα προστεθούν τα αντίστοιχα μέλη του αντικειμένου-παραμέτρου. Έτσι λοιπόν, ορίζουμε δύο αντικείμενα στις γραμμές 18 και 19 και μετά καλούμε τη μέθοδο για το πρώτο από αυτά στη γραμμή 20. Καλώντας τη μέθοδο print για το αντικείμενο a στη γραμμή 21, βλέπουμε ότι τα μέλη του από 3 και 4 πήραν τις τιμές 5 και 9 αντίστοιχα. Ας δούμε πώς θα μπορούσαμε να πετύχουμε το ίδιο αποτέλεσμα, υπερφορτώνοντας κάποιον τελεστή. Κατ αρχάς μπορούμε να υπερφορτώσουμε οποιονδήποτε δυαδικό τελεστή της C++ είτε ταιριάζει είτε όχι με την σημασιολογία των τελεστών της C++. Δηλαδή θα μπορούσαμε για να κάνουμε την παραπάνω πράξη πρόσθεσης να υπερφορτώσουμε τον τελεστή - ή τον τελεστή %. Προφανώς είναι καλό για να είναι πιο κατανοητό το πρόγραμμα και βολική στη χρήση της η κλάση να χρησιμοποιήσουμε κάποιον τελεστή που να ταιριάζει καλύτερα με την πράξη που θέλουμε να κάνουμε. Στην περίπτωσή μας, αυτό που θέλουμε να κάνουμε είναι να πραγματοποιήσουμε μια πρόσθεση αλλάζοντας ταυτόχρονα τον έναν από τους δύο τελεστέους. Αυτή είναι η σημασιολογία του τελεστή += της C++ οπότε είναι λογικό να χρησιμοποιήσουμε αυτόν. Ο τελεστής αυτός παίρνει δύο ορίσματα, δηλαδή θα θέλαμε να τον χρησιμοποιούμε κάπως έτσι: a += b;. Έχουμε λοιπόν σύμφωνα με την προηγούμενη συζήτηση τις εξής δύο εναλλακτικές: 2.1 Υπερφόρτωση μέσα στην κλάση Να γράψουμε τον κώδικα ως μέθοδο της κλάσης, ορίζοντας την μέσα στο σώμα της κλάσης. Σε αυτήν την περίπτωση η μέθοδος θα παίρνει μία μόνο παράμετρο παρόλο που ο τελεστής είναι δυαδικός και χρησιμοποιείται ως a += b;. Αυτό γίνεται γιατί ο πρώτος τελεστέος της πράξης (στο παράδειγμά μας το a) εννοείται ότι είναι το ίδιο το αντικείμενο για το οποίο καλείται ο τελεστής. Η μία παράμετρος που θα παίρνει η μέθοδος υπερφόρτωσης του τελεστή αντιστοιχεί στον δεύτερο τελεστέο της πράξης (στο παράδειγμά μας το b). Έχοντας ξεκαθαρίσει το πλήθος των παραμέτρων του τελεστή και επίσης έχοντας ως δεδομένο ότι το όνομα της μεθόδου θα είναι operator ακολουθούμενο από τον τελεστή +=. Προς το παρόν θα θεωρήσουμε ότι δεν χρειάζεται η νέα μέθοδος να επιστρέφει κάτι οπότε θα την αφήσουμε να επιστρέφει void¹. Συνοψίζοντας λοιπόν, μπορούμε να προσθέσουμε τον παρακάτω κώδικα 1 void operator += ( cplex other) { re += other. re; im += other. im; } αμέσως μετά τη γραμμή 13 του παραδείγματος και επίσης να αντικαταστήσουμε την εντολή a.add(b); της γραμμής 20 με την εντολή a += b;. Αν γράψετε το πρόγραμμα όπως περιγράφτηκε προηγουμένως θα παρατηρήσετε ότι η μέθοδος add που είχε γραφτεί στη γραμμή 13 είναι στην ουσία ολόιδια με τη γραμμή που προσθέσαμε με μόνη εξαίρεση το όνομα της μεθόδου που αντί για add έγινε operator+=. ¹Θα δούμε παρακάτω ότι μπορούμε να κάνουμε κάποιες παραπάνω σκέψεις σχετικά με αυτό το θέμα 3
4 Ας δούμε αναλυτικά τι συμβαίνει με την εντολή a += b;: Η γλώσσα αντιλαμβάνεται ότι ο τελεστής += εφαρμόζεται σε αντικείμενα κλάσεων που έχει ορίσει ο χρήστης. Έτσι λοιπόν δεν εφαρμόζει την ενσωματωμένη σημασιολογία της C++ για τον τελεστή αυτόν αλλά θεωρεί ότι πρόκειται για κλήση μιας μεθόδου του αριστερού τελεστέου με παράμετρο τον δεξιό, δηλαδή για κλήση μιας μεθόδου του αντικειμένου a με παράμετρο το b. Εφόσον υπάρχει η μέθοδος operator+= στην κλάση στην οποία ανήκει το αντικείμενο a, την καλεί με παράμετρο το b. Έτσι τελικά, στην ουσία πρόκειται απλώς για μια κλήση μεθόδου ενός αντικειμένου με ένα βολικότερο για μας συντακτικό. Για να πειστείτε, αντικαταστήστε την κλήση a += b; της γραμμής 20 με αυτήν: a.operator+=(b);. Θα παίξει κανονικότατα... Ας δούμε και ένα άλλο παράδειγμα λίγο διαφορετικό. Ας υποθέσουμε ότι θέλουμε να υπερφορτώσουμε τον τελεστή + έτσι ώστε να προσθέτει μιγαδικούς κάπως έτσι a + b;. Η κατάσταση μοιάζει με την περίπτωση a += b;. Και στις δύο περιπτώσεις έχουμε δυαδικούς τελεστές οι οποίοι επιδρούν σε δύο cplex αντικείμενα. Οπότε και εδώ, όπως και πριν, αν κάνουμε την υπερφόρτωση μέσα στην κλάση θα έχουμε μία μέθοδο με ένα όρισμα. Η διαφορά είναι ότι ο τελεστής += αλλάζει τις τιμές του αριστερού τελεστέου του ενώ ο + όχι. Στην περίπτωση του + δηλαδή θα πρέπει να αφήσουμε ανέπαφα τα μέλη re και im των τελεστέων, να υπολογίσουμε το άθροισμά τους και να δημιουργήσουμε ένα νέο αντικείμενο cplex το οποίο και να επιστρέψουμε. Για το σκοπό αυτό θα πρέπει να καλέσουμε ρητά τον constructor που χρειαζόμαστε για να κατασκευάσουμε το νέο αντικείμενο: 1 cplex operator +( cplex other) { return cplex( re + other.re, im + other. im); } 2.2 Υπερφόρτωση έξω από την κλάση Στην περίπτωση που επιλέξουμε να υπερφορτώσουμε τον τελεστή έξω από την κλάση πρέπει να πάρουμε υπόψη μας ότι ο αριστερός τελεσταίος δεν υπονοείται άρα πρέπει να τον αναφέρουμε ρητά. Δηλαδή η λίστα ορισμάτων του υπερφορτωμένου τελεστή θα έχει δύο παραμέτρους:(cplex left, cplex right) Τελικά λοιπόν, θα μπορούσαμε να γράψουμε κάτι σαν αυτό κάτω από τη γραμμή 14 που τελειώνει το σώμα της κλάσης: 1 void operator +=( cplex left, cplex right) 2 { 3 left. re += right. re; left. im += right. im; 4 } Παρατηρήστε ότι στην προηγούμενη εκδοχή γράφαμε re += δηλαδή αναφερόμασταν στο μέλος re χωρίς να αναγράφουμε το όνομα του αντικειμένου ακολουθούμενο από τελεία. Αυτό γινόταν γιατί εφόσον ο κώδικας ήταν γραμμένος μέσα στην κλάση, υπονοείτο ότι αν αναφέραμε ένα όνομα μέλους χωρίς να γράφουμε το όνομα του αντικειμένου εννούσαμε το αντικείμενο για το οποίο γινόταν η κλήση. Σε αυτήν την περίπτωσή όμως, δεν συμβαίνει κάτι τέτοιο. Το αντικείμενο για το οποίο γίνεται η κλήση αναφέρεται ρητά στη λίστα παραμέτρων (cplex left) οπότε αν θέλουμε να αναφερθούμε στα μέλη του πρέπει να το κάνουμε ρητά: left.re. Αν μεταγλωττίσετε τον παραπάνω κώδικα θα σας δώσει μηνύματα λάθους. Τα μηνύματα θα έχουν να κάνουν με τα δικαιώματα πρόσβασης στα private μέλη των αντικειμένων. Σύμφωνα με όσα ξέρουμε για τα δικαιώματα πρόσβασης, η παραπάνω συνάρτηση δεν έχει δικαίωμα να προσπελάσει τα ιδιωτικά μέλη re και im των αντικειμένων left και right. Πώς θα μπορούσαμε να ξεπεράσουμε 4
5 το πρόβλημα; Ένας τρόπος θα ήταν να γράψουμε accessors και modifiers με τους οποίους θα δίναμε δικαιώματα ανάγνωσης και τροποποίησης στα εσωτερικά μέλη των αντικειμένων της κλάσης cplex. Τελικά αν γράφαμε public μεθόδους σαν τις παρακάτω: 1 float getre() { return re; } 2 float getim() { return im; } 3 void setre( float _re) { re = _re; } 4 void setim( float _im) { im = _im; } Θα μπορούσαμε να τροποποιήσουμε τον κώδικα του υπερφορτωμένου τελεστή κάπως έτσι ώστε να δουλέψει: 1 void operator +=( cplex left, cplex right) 2 { 3 left. setre(left. getre() + right. getre()); 4 left. setim(left. getim() + right. getim()); 5 } Το μειονέκτημα αυτής της προσέγγισης είναι ότι θέλοντας να δώσουμε πρόσβαση στα εσωτερικά μέλη για το σκοπό ενός μόνο υπερφορτωμένου τελεστή, αναγκαζόμαστε να δώσουμε πρόσβαση σε όλο τον κόσμο εφόσον πλέον μπορούμε να καλέσουμε τις public μεθόδους getre, setre() κτλ. από οποιοδήποτε σημείο του κώδικα. Επίσης ο κώδικας του υπερφορτωμένου τελεστή γίνεται σαφώς πιο πολύπλοκος. Μια πιο λογική προσέγγιση θα ήταν να δώσουμε δικαίωμα πρόσβασης στα private μέλη της κλάσης μόνο στον υπερφορτωμένο τελεστή. Η C++ μας δίνει τη δυνατότητα να το κάνουμε δηλώνοντας τον κώδικα του υπερφορτωμένου τελεστή ως friend (φίλου) μέσα στην κλάση. Φίλοι μιας κλάσης μπορεί να είναι τόσο άλλες κλάσεις όσο και συναρτήσεις. Για να δηλώσουμε μία κλάση ή μία συνάρτηση ως φίλο μίας κλάσης πρέπει μέσα στο σώμα της κλάσης να γράψουμε τη λέξη friend ακολουθούμενο από το όνομα της άλλης κλάσης ή την επικεφαλίδα της συνάρτησης που θέλουμε να κάνουμε φίλο. Στην περίπτωσή μας αρκεί να γράψουμε μέσα στην κλάση 1 friend void operator +=( cplex left, cplex right); Τώρα το πρόγραμμα μεταγλωττίζεται κανονικά. Παρόλα αυτά είναι αρκετά πιο σύνθετο από την περίπτωση της προηγούμενης ενότητας όπου υπερφορτώσαμε τον τελεστή μέσα στην κλάση. Για ποιο λόγο λοιπόν να θέλουμε να υπερφορτώσουμε έναν τελεστή έξω από μία κλάση; Θυμηθείτε ότι όταν υπερφορτώνουμε έναν δυαδικό τελεστή στην ουσία γράφουμε μία μέθοδο η οποία θα κληθεί για ένα συγκεκριμένο αντικείμενο: τον αριστερό τελεστέο. Αν όμως ο αριστερός τελεστέος δεν είναι αντικείμενο ή δεν είναι αντικείμενο που έχουμε στη διάθεσή μας τον κώδικά του δεν μπορούμε να τον υπερφορτώσουμε μέσα στην κλάση στην οποία ανήκει είτε γιατί δεν υπάρχει τέτοια κλάση είτε γιατί δεν μπορούμε να αλλάξουμε τον κώδικά της. Το παρακάτω παράδειγμα θα κάνει τα προηγούμενα πιο σαφή. Υποθέστε ότι έχουμε το παρακάτω: 1 class cplex { 2 private: 3 float re, im; 4 5 public: 5
6 6 cplex() { re = im = 0; } 7 cplex( float _re, float _im) { re = _re; im = _im; } 8 9 void operator +=( cplex b) { re += b. re; im += b. im; } 10 cplex operator +( cplex other) { return cplex( re + other.re, im + other. im); } 11 }; Έχουμε δηλαδή τη γνωστή μας κλάση και έχουμε υπερφορτώσει τον τελεστή + για να προσθέτουμε μιγαδικούς. Έτσι λοιπόν, αν έχουμε δύο αντικείμενα cplex a, b; μπορούμε να προσθέσουμε το ένα στο άλλο γράφοντας a + b;. Δυστυχώς, αν γράψουμε a + 2; το πρόγραμμα δεν μεταγλωττίζεται. Αποφασίζουμε λοιπόν να υπερφορτώσουμε τον τελεστή + άλλη μία φορά, αλλά με όρισμα έναν απλό αριθμό. Έτσι λοιπόν γράφουμε 1 void operator +( float other) { re += other; } και τελειώσαμε. Τώρα μπορούμε να γράφουμε a + 2; και να παίζει μια χαρά. Θυμηθείτε ότι όταν γράφουμε a + 2; είναι σαν να γράφουμε a.operator+(2); δηλαδή να καλούμε μία μέθοδο του αντικειμένου a με παράμετρο έναν float. Αν όμως πάμε να γράψουμε το προφανές 2 + a; το πρόγραμμα δεν μεταγλωττίζεται. Ο λόγος είναι ότι για τους float δεν έχει κανείς υπερφορτώσει τον τελεστή + για να παίρνει όρισμα μιγαδικό και φυσικά ούτε και θα μπορούσε καθώς οι float δεν είναι αντικείμενα κάποιας κλάσης. Μία άλλη περίπτωση είναι η υπερφόρτωση του τελεστή << ώστε να μπορούμε να τυπώνουμε αντικείμενα κάπως έτσι: cout << a;. Ούτε εδώ μπορούμε να κάνουμε υπερφόρτωση μέσα στην κλάση καθώς δεν έχουμε τον κώδικα που υλοποιεί το αντικείμενο cout (ή πιο σωστά δεν θα έπρεπε να τον πειράξουμε). Οπότε για να καλύψουμε περιπτώσεις σαν τις δύο παραπάνω θα έπρεπε να γράψουμε τις παρακάτω συναρτήσεις έξω από το σώμα της κλάσης 1 cplex operator +( float f, cplex a) 2 { 3 return cplex(f + a.re, a. im); 4 } 5 6 ostream& operator <<( ostream& ost, cplex a) 7 { 8 return ost << "(" << a. re << ", " << a. im << "j)"; 9 } και μέσα στο σώμα της κλάσης να τις δηλώσουμε ως φίλες με τις παρακάτω εντολές: 1 friend cplex operator +( float f, cplex a); 2 friend ostream& operator <<( ostream& ost, cplex a); 3 Υπερφόρτωση μοναδιαίων τελεστών Οι μοναδιαίοι τελεστές είναι γενικά απλούστερη περίπτωση. Μιας και παίρνουν ένα και μόνο όρισμα, αυτό αφορά κλάσεις που έχουμε γράψει οι ίδιοι οπότε η υπερφόρτωση γίνεται μέσα στο σώμα της κλάσης. Οι πιο συνηθισμένοι μοναδιαίοι τελεστές είναι οι +, -, ~,!, ++ και --. Οι 4 πρώτοι 6
7 γράφονται πριν το όρισμά τους οπότε για να τους υπερφορτώσουμε γράφουμε τα γνωστά χωρίς κανένα όρισμα στη λίστα παραμέτρων. Π.χ. για να υπερφορτώσουμε τον μοναδιαίο - γράφουμε το παρακάτω 1 cplex operator -() { return cplex(-re, -im); } Παρατηρήστε ότι οι 4 πρώτοι τελεστές γράφονται πάντα πριν το όρισμά τους. Κάτι ανάλογο μπορούμε να γράψουμε και για τους τελεστές μοναδιαίας αύξησης και μείωσης ++ και --. Αν π.χ. γράψουμε την μέθοδο void operator++() {... μπορούμε να γράψουμε κώδικα σαν αυτόν ++a;, δηλαδή να υπερφορτώσουμε τον προθεματικό τελεστή μοναδιαίας αύξησης. Τότε όμως, πώς θα μπορούσαμε να υπερφορτώσουμε τον μεταθεματικό τελεστή μοναδιαίας αύξησης, για να μπορούμε δηλαδή να γράψουμε a++; Η λύση εδώ είναι ένα τέχνασμα: Για να μπορεί ο μεταγλωττιστής να ξεχωρίσει ότι αναφερόμαστε στον μεταθεματικό τελεστή δηλώνουμε ένα εικονικό όρισμα (δεν πρόκειται να χρησιμοποιηθεί) στον ορισμό της υπερφόρτωσης: 1 void operator++(int) {... } Συνοψίζοντας: Σχεδόν όλοι οι μοναδιαίοι τελεστές γράφονται πριν το όρισμά τους. Οπότε για να τους υπερφορτώσουμε γράφουμε την ανάλογη μέθοδο χωρίς παραμέτρους. Το ίδιο κάνουμε και για τους προθεματικούς τελεστές ++ και --, δηλαδή γράφουμε τις μεθόδους υπερφόρτωσης χωρίς παραμέτρους. Για να υπερφορτώσουμε τους μεταθεματικούς ++ και -- γράφουμε την αντίστοιχη μέθοδο αλλά στη λίστα παραμέτρων βάζουμε ένα εικονικό όρισμα το οποίο μάλιστα αφού δεν χρησιμοποιείται δεν χρειάζεται να του δώσουμε όνομα, γράφουμε δηλαδή κάτι τέτοιο: (int). Το τελικό πρόγραμμα με τις υπερφορτώσεις που έχουμε συζητήσει μέχρι στιγμής καθώς και κάποιες εντολές για να δούμε τα αποτελέσματα των τελεστών μας είναι το παρακάτω: 1 # include <iostream > 2 using namespace std; 3 4 class cplex { 5 private: 6 float re, im; 7 8 public: 9 cplex() { re = im = 0; } 10 cplex( float _re, float _im) { re = _re; im = _im; } void operator +=( cplex b) { re += b. re; im += b. im; } 13 cplex operator + ( cplex other) { return cplex( re + other.re, im + other. im); } cplex operator -() { return cplex(-re, -im); } 16 cplex operator ++() { return cplex(++re, im); } 17 cplex operator ++( int) { return cplex( re++, im); } 7
8 18 friend cplex operator +( float f, cplex a); 19 friend ostream& operator <<( ostream& ost, cplex a); }; cplex operator +( float f, cplex a) 24 { 25 return cplex(f + a.re, a. im); 26 } ostream& operator <<( ostream& ost, cplex a) 29 { 30 return ost << "(" << a. re << ", " << a. im << "j)"; 31 } int main() 34 { 35 cplex a(3,4); 36 cplex b(2,5); 37 cout << "a: " << a << endl; 38 cout << "b: " << b << endl; 39 cout << "a + b: " << a + b << endl; 40 cout << "2 + a: " << 2 + a << endl; 41 cout << "-a: " << -a << endl; 42 cout << " ++a:" << ++a << endl; 43 cout << "a: " << a << endl; 44 cout << "a++:" << a++ << endl; 45 cout << "a: " << a << endl; return 0; 48 } 4 Ο προσδιοριστής const Σε πολλές περιπτώσεις θέλουμε να δηλώσουμε ότι κάποια ποσότητα στο πρόγραμμά μας πρέπει να μένει σταθερή, δηλαδή να μην επιτρέπεται σε κανέναν να τη μεταβάλλει. Η έννοια της σταθερότητας μπορεί να έχει αρκετές ενδιαφέρουσες προεκτάσεις. 4.1 Σταθερές μεταβλητές και παράμετροι Ας υποθέσουμε ότι θέλουμε να χρησιμοποιήσουμε σε ένα πρόγραμμά μας τον αριθμό π, δηλαδή τον μισό του λόγου της περιφέρειας ενός κύκλου προς την ακτίνα του. Αυτή η ποσότητα είναι σταθερή οπότε δεν θα θέλαμε σε ένα πρόγραμμα σαν το παρακάτω 1 float pi = ; 8
9 2 pi = 5; να επιτραπεί η εκτέλεση της δεύτερης εντολής. Για να πετύχουμε αυτόν το σκοπό δηλώνουμε τη μεταβλητή που μας ενδιαφέρει να μένει σταθερή και προσθέτουμε τον προσδιοριστή const αμέσως πριν ή αμέσως μετά το όνομα του τύπου, δηλαδή γράφουμε 1 const float pi = ; και πλέον δεν επιτρέπεται η ανάθεση άλλης τιμής στην μεταβλητή pi. Ο γενικός κανόνας για τον προσδιοριστή const είναι ότι αναφέρεται σε αυτό που είναι αμέσως προς τα αριστερά του, εκτός αν δεν υπάρχει κάτι στα αριστερά οπότε αναφέρεται σε αυτό που βρίσκεται προς τα δεξιά. Δηλαδή, η δήλωση const float pi; σημαίνει ότι ακριβώς και η float const pi; δηλαδή ότι η pi είναι τύπου σταθερός float δηλαδή ένας float που δεν επιτρέπεται να αλλάξει. Η δήλωση float const * f σημαίνει ότι η f είναι ένας δείκτης σε σταθερό float, δηλαδή μπορούμε να αλλάξουμε την τιμή του δείκτη f αλλά όχι τα περιεχόμενα της θέσης μνήμης στην οποία δείχνει. Η δήλωση float * const f σημαίνει ότι ο δείκτης f είναι σταθερός δηλαδή δείχνει πάντα την ίδια θέση μνήμης γιατί δεν μπορούμε να τον αλλάξουμε αλλά τα περιεχόμενα της θέσης μνήμης στην οποία δείχνει μπορούν να μεταβληθούν. Επίσης η δήλωση float const * const f σημαίνει ότι ο f είναι ένας σταθερός δείκτης, δηλαδή δεν μπορούμε να τον κάνουμε να δείχνει σε άλλη θέση μνήμης και επίσης τα περιεχόμενα της θέσης μνήμης αυτής είναι σταθερά. Το ίδιο μπορεί να γίνει και για παραμέτρους συναρτήσεων και μεθόδων, δηλαδή ενώ το παρακάτω επιτρέπεται 1 void f(int a) 2 { a = 12; } το επόμενο χτυπάει 1 void f( const int a) 2 { a = 12; } Η έννοια της σταθερότητας που αναφέραμε παραπάνω θα μπορούσε να ονομαστεί φυσική σταθερότητα. Δηλαδή, δηλώνοντας μια μεταβλητή ή παράμετρο ως const η γλώσσα δεν επιτρέπει τη μεταβολή της στη μνήμη με την έννοια ότι κανένα από τα bits που αντιστοιχούν σε αυτήν τη μεταβλητή δεν επιτρέπεται να αλλάξει τιμή. Υπάρχει και μια άλλη έννοια που θα μπορούσε να αποδοθεί στη σταθερότητα και θα μπορούσαμε να την ονομάσουμε λογική σταθερότητα. Σύμφωνα με αυτήν, μια ποσότητα θα μπορούσε να θεωρείται αμετάβλητη ακόμα και αν άλλαζαν οι τιμές της αρκεί να συνέχιζε να πληρεί κάποιες ιδιότητες. Ένα παράδειγμα: υποθέστε ότι γράφετε μια κλάση η οποία να αναπαριστά ρητούς αριθμούς, δηλαδή πηλίκα ενός αριθμητή και ενός παρονομαστή. Το πλεονέκτημα αυτής της αναπαράστασης είναι ότι δεν χάνουμε δεκαδικά ψηφία σε περιπτώσεις πράξεων που δεν δίνουν στρογγυλό αποτέλεσμα όπως για παράδειγμα το είκοσι διά έξι. Αν προσπαθήσουμε να το αναπαραστήσουμε ως δεκαδικό γράφεται αλλά καθώς ο υπολογιστής δεν μπορεί να αναπαραστήσει άπειρα δεκαδικά ψηφία χάνουμε σε ακρίβεια. Οπότε προτιμούμε την αναπαράσταση αυτού του αριθμού ως ένα ζευγάρι (20,6). Ας υποθέσουμε επίσης ότι γράφουμε μία κλάση για να αναπαριστά αυτά τα ζευγάρια. Αν γράψουμε μία μέθοδο που κάνει απλοποίηση αυτή θα μπορούσε να αλλάξει τις τιμές του προηγούμενου ζευγαριού και από (20,6) να τις κάνει (10,3). Σε αυτήν την περίπτωση, τα bits που αναπαριστούσαν τις τιμές αυτές 9
10 έχουν αλλάξει. Δηλαδή το αντικείμενο δεν παρέμεινε σταθερό από φυσική άποψη. Αλλά από λογική άποψη, συνεχίζει να αναπαριστά τον ίδιο αριθμό οπότε παραμένει υπ αυτήν την έννοια σταθερό. Οπότε, όταν λέμε ότι ένα αντικείμενο είναι const, η γλώσσα απαγορεύει την απ ευθείας μεταβολή των μελών του, δηλαδή επιβάλλει φυσική σταθερότητα. Αυτό γίνεται εύκολα γιατί η C++ μπορεί να τσεκάρει κάτι τέτοιο. Αυτό που δεν μπορεί όμως να τσεκάρει εύκολα είναι αν οι μέθοδοι που γράφουμε για τα αντικείμενα τα αφήνουν σταθερά από λογική άποψη ή όχι. Για να βοηθήσουμε τη γλώσσα, δηλώνουμε ποιες μέθοδοι δεν μταβάλλουν από λογική άποψη τα αντικείμενα, παραθέτοντας τον προσδιοριστή const αμέσως μετά τις παρενθέσεις μέσα στις οποίες μπαίνει η λίστα ορισμάτων της μεθόδου. Για παράδειγμα, ο υπερφορτωμένος τελεστής πρόσθεσης που αναφέραμε στην κλάση cplex, δεν μεταβάλλει το αντικείμενο για το οποίο καλείται. Για να το δηλώσουμε θα έπρεπε να γράψουμε 1 cplex operator + ( cplex other) const {... } Ανακεφαλαιώνοντας λοιπόν, αν δηλώσουμε ένα αντικείμενο const απαγορεύεται η απ ευθείας αλλαγή των μελών δεδομένων του και επιτρέπεται η κλήση μεθόδων τύπου const όπως ο υπερφορτωμένος τελεστής πρόσθεσης παραπάνω. Κλείνουμε το θέμα με μία παρατήρηση, η οποία μπορεί να θεωρηθεί ψιλά γράμματα. Αν αφήσουμε τον υπερφορτωμένο τελεστή πρόσθεσης όπως παραπάνω ίσως κάποτε διαπιστώσουμε το εξής πρόβλημα: Αν υποθέσουμε ότι έχουμε δύο αντικείμενα a και b τύπου cplex και με δεδομένα τα παραδείγματα που έχουμε μέχρι στιγμής παρουσιάσει, τότε εντολές σαν την παρακάτω επιτρέπονται. 1 (a+b) = a; Ίσως δεν είναι προφανές γιατί αυτό δεν θα έπρεπε να επιτρέπεται. Αν δοκιμάσετε να το κάνετε με δύο ακέραιες μεταβλητές η C++ θα σας δώσει μήνυμα λάθους. Αν δοκιμάστε να μεταγλωττίσετε το παρακάτω 1 int x,y; 2 (x+y) = x; θα πάρετε το μήνυμα λάθους lvalue required as left operand of assignment, δηλαδή για να αποθηκεύσουμε μία τιμή με τον τελεστή = κάπου, πρέπει αυτό που βρίσκεται αριστερά από το ίσον να είναι μια νόμιμη lvalue δηλαδή μια περιοχή μνήμης στην οποία να έχει δικαίωμα εγγραφής ο προγραμματιστής. Όταν λοιπόν λέμε (a+b) = a; κάνουμε το εξής λάθος: Το άθροισμα a+b δεν αντιστοιχεί σε κάποια ονοματισμένη θέση μνήμης την οποία μπορούμε αργότερα να προσπελάσουμε. Το αποτέλεσμα a+b είναι ένα προσωρινό αντικείμενο που αρχικοποιείται από τον υπερφορτωμένο τελεστή της πρόσθεσης, επιστρέφεται από αυτόν και ζει για λίγο στην στοίβα από όπου σύντομα καταστρέφεται. Οπότε για να είμαστε πιο ακριβείς, το πρόβλημα με την ανάθεση (a+b) = a; δεν είναι ότι δεν θα έπρεπε να επιτρέπεται γιατί δεν μπορεί να πραγματοποιηθεί αλλά γιατί δεν έχει νόημα να πραγματοποιηθεί αφού μετά δεν μπορούμε να έχουμε πρόσβαση στην περιοχή της στοίβας που αποθηκεύτηκε το αποτέλεσμα. Μπορούμε να αποφύγουμε τέτοιες αβλεψίες δηλώνοντας ότι το αντικείμενο που επιστρέφει ο υπερφορτωμένος τελεστής της πρόσθεσης είναι και αυτό const κάπως έτσι: 1 const cplex operator + ( cplex other) const {... } 10
Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )
ΤΕΛΕΣΤΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τι είναι οι τελεστές Χρήση τελεστών Υπερφόρτωση τελεστών Chain-linking Τελεστών Τελευταία ενημέρωση: Ιούνιος 2013 Εισαγωγή - 2 Τελεστής
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
= Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Δεκέμβριος 2018 1/18 = 2/18 = 1 αντικειμένων Μέθοδοι αντιγράφου (copy constructor) Κατασκευή μέσω
Διαβάστε περισσότεραΚλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Διαβάστε περισσότεραΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++
Υπερφόρτωση, keywords CONST, STATIC, FRIEND ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Υπερφόρτωση Συναρτήσεων Τελεστών CONST αντικείμενα, μεταβλητές και συναρτήσεις
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαβάστε περισσότεραΚλάσεις και αντικείμενα #include <iostream.h<
Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void
Διαβάστε περισσότεραΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 6: Κατανομή και Δυναμική Διαχείριση Μνήμης, τελεστές new και delete, υπερφόρτωση μονομελών τελεστών Το περιεχόμενο
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα
Διαβάστε περισσότερα3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις
3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα
Διαβάστε περισσότεραPascal, απλοί τύποι, τελεστές και εκφράσεις
Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το
Διαβάστε περισσότεραΕρωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 3 Φεβρουαρίου 2013 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.155) Τι είναι το αντικείμενο και ποια τα χαρακτηριστικά του; Περιγράψτε το
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή
Διαβάστε περισσότερα5ο σετ σημειώσεων - Δείκτες
5ο σετ σημειώσεων - Δείκτες 11 Ιουνίου 01 1 Γενικά Σύμφωνα με το γενικό μοντέλο υπολογιστή, ένας υπολογιστής είναι μία μηχανή που διαθέτει μία κεντρική μονάδα επεξεργασίας η οποία μπορεί μεταξύ άλλων να
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι είναι ; Συναρτήσεις Αυτόνομα τμήματα κώδικα (υποπρογράμματα) που πραγματοποιούν μια καθορισμένη εργασία. Χρήσιμες για περιπτώσεις που ο ίδιος υπολογισμός επαναλαμβάνεται πολλές φορές
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 9η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Μέθοδοι με ορίσματα της ίδιας τάξης. Μέθοδοι που επιστρέφουν αντικείμενα
Διαβάστε περισσότεραΔομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου
Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού
Διαβάστε περισσότεραΠρογραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Διαβάστε περισσότεραΣτοιχειώδης προγραμματισμός σε C++
Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.
Διαβάστε περισσότεραΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 7: Υπερφόρτωση διμελών τελεστών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ 1 Τύποι δεδομένων Η γλώσσα προγραμματισμού C++ υποστηρίζει τους παρακάτω τύπους δεδομένων: 1) Ακέραιοι αριθμοί (int). 2) Πραγματικοί αριθμοί διπλής ακρίβειας
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δεύτερη Διάλεξη Βασικά στοιχεία της γλώσσας προγραμματισμού C Μία γλώσσα προγραμματισμού όπως και μια ανθρώπινη γλώσσα μπορεί να μελετηθεί ως προς το αλφάβητό της,
Διαβάστε περισσότεραΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ
ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:
Διαβάστε περισσότεραΠρογραμματισμός ΙI (Θ)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές
Διαβάστε περισσότεραΕισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΟικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2
Οικονόμου Βαγγέλησ Διάλεξη Νο 2 Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2 1 Η έννοια τησ μεταβλητήσ έδωςε λύςη ςτο πρόβλημα τησ αναφοράσ ςτην κύρια μνήμη του υπολογιςτή. Οι γλώςςεσ προγραμματιςμού υποςτηρίζουν
Διαβάστε περισσότεραΔομημένος Προγραμματισμός (ΤΛ1006)
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής
Διαβάστε περισσότεραΔιάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,
Διαβάστε περισσότεραΗ-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr
Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην
Διαβάστε περισσότεραΕισαγωγή. 1 Γενικά. 2 Προγράμματα σε C++ 5 Νοεμβρίου 2012
Εισαγωγή 5 Νοεμβρίου 2012 1 Γενικά Η C++ αναπτύχθηκε με στόχο την ενσωμάτωση χαρακτηριστικών του αντικειμενοστρεφούς προγραμματισμού στη διαδικαστική C. Δεν θεωρείται αμιγής αντικειμενοστρεφής γλώσσα αλλά
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ 1 (Εργαστήριο)
Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες
Διαβάστε περισσότεραΥπερφόρτωση Τελεστών
Υπερφόρτωση Τελεστών Υπερφόρτωση του τελεστή ανάθεσης τιμής (=) Υπερφόρτωση των αριθμητικών τελεστών (+, -, *, /) Υπερφόρτωση των αριθμητικών τελεστών ανάθεσης (+=, -=, *=, /=) Υπερφόρτωση των συσχετιστικών
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Τύποι δεδομένων, μεταβλητές, πράξεις Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΣτόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή
Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο
Διαβάστε περισσότεραΟνοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!
Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Σεπτεμβρίου 2011. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 10η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση των τελεστών εισόδου και εξόδου. Τάξεις και δυναμική καταχώριση
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ Πρώτα να δούμε τι ακριβώς συμπεριλαμβάνει μια μεταβλητή τύπος Καθορίζει το μέγεθος στην μνήμη σε Bytes τιμή Η αριθμητική τιμή που αποθηκεύεται στην
Διαβάστε περισσότεραΗ πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης
Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών
Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε
Διαβάστε περισσότεραPascal. 15 Νοεμβρίου 2011
Pascal 15 Νοεμβρίου 011 1 Procedures σε Pascal Στην Pascal μπορούμε να ορίσουμε διαδικασίες (procedures). Αυτές είναι ομάδες εντολών οι οποίες έχουν ένα όνομα. Γράφοντας το όνομα μιας διαδικασίας μπορούμε
Διαβάστε περισσότερα2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008
Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διαβάστε περισσότεραΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση
Διαβάστε περισσότεραΕισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C
Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος
Διαβάστε περισσότεραΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ
ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΒασικές Αρχές Προγραμματισμού
Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον
Διαβάστε περισσότεραΠρογραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Διαβάστε περισσότεραΛογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ
ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους
Διαβάστε περισσότεραΕισαγωγή στη γλώσσα προγραμματισμού C++
Εισαγωγή στη γλώσσα προγραμματισμού C++ Περιβάλλον Εργασίας 2 Περιβάλλον Εργασίας 1. Χρήση απλού κειμενογράφου και Μεταγλωττιστή 2. Ολοκληρωμένα Περιβάλλοντα Εργασίας (Integrated Development Environments)
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 6η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προκαθορισμένες τιμές ορισμάτων. Υπερφόρτωση συναρτήσεων. Συναρτήσεις
Διαβάστε περισσότεραΤι είναι κλάση Κλάση
35 Τι είναι κλάση Κλάση είναι μια συλλογή από μεταβλητές. Αλλιώς είναι ένα σύνολο από: δεδομένα που δηλώνουν τα χαρακτηριστικά της κλάσης (τι είναι) και συναρτήσεις που προδιαγράφουν την συμπεριφορά της
Διαβάστε περισσότερα3 Αλληλεπίδραση Αντικειμένων
Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή
Διαβάστε περισσότεραΚλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
Διαβάστε περισσότεραΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ
ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ Κεφαλαία και μικρά γράμματα ελληνικού αλφαβήτου: Α Ω και α ω Κεφαλαία και μικρά γράμματα λατινικού αλφαβήτου: A Z και a z Αριθμητικά ψηφία: 0 9 Ειδικοί χαρακτήρες: + - * / =. ( ),! & κενός
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Διαβάστε περισσότεραΤμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος
Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Πώς δημιουργούμε πρόγραμμα Η/Υ; 1. Ανάλυση του προβλήματος 2. Επινόηση & Σχεδιασμός
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 2: Τύποι μεταβλητών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Υπερφόρτωση Τελεστών ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ
Διαβάστε περισσότεραΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Τελεστές - Κατηγορίες Εκφράσεις - Κατηγορίες Υπολογισμός εκφράσεων Προτάσεις - Κατηγορίες
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό με C++
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 10: Constructors και Destructors Κωνσταντίνος Κουκουλέτσος Τμήμα Αυτοματισμού Άδειες
Διαβάστε περισσότεραΔομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος
ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 3 Επανάληψη Γ μέρος 1. Στόχος του εργαστηρίου Στόχος του τρίτου εργαστηρίου είναι
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις (Functions) Οι βασικές λειτουργικές ενότητες ενός προγράμματος C Καλούνται με ορίσματα που αντιστοιχούνται σε
Διαβάστε περισσότεραΤελικό τεστ - απαντήσεις
Τελικό τεστ - απαντήσεις Θεωρήστε το παρακάτω πρόγραμμα και απαντήστε στις ερωτήσεις που ακολουθούν. 1 class parent { 2 public: 3 int a; int b; 4 parent(int _a, int _b) {} 5 6 void f1(int x) { cout
Διαβάστε περισσότεραΠρογραµµατιστικές Τεχνικές
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Προγραµµατιστικές Τεχνικές Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο
Διαβάστε περισσότεραΟνοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!
Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Φεβρουαρίου 2010. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το
Διαβάστε περισσότεραΣυναρτήσεις. Υποπρόγραμμα
Συναρτήσεις Υποπρόγραμμα Ένα σύνολο από εντολές που κάνουν κάτι συγκεκριμένο, έχουν στενή σχέση/εξάρτηση μεταξύ τους, έχουν «χαλαρή» σύνδεση με τον υπόλοιπο κώδικα, μπορεί να εξαχθεί από το πρόγραμμά μας
Διαβάστε περισσότεραΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων
Διαβάστε περισσότεραΣυναρτήσεις και Πίνακες
Συναρτήσεις και Πίνακες Συναρτήσεις καθιερωμένης βιβλιοθήκης της C++ Συναρτήσεις οριζόμενες από τον χρήστη Μεταβίβαση κατ αξία Συναρτήσεις void και λογικές συναρτήσεις Μεταβίβαση κατ αναφορά Επιστροφή
Διαβάστε περισσότερα1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης
1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης Στη συγκεκριμένη ενότητα εξετάζουμε θέματα σχετικά με την αριθμητική πεπερασμένης ακρίβειας που χρησιμοποιούν οι σημερινοί υπολογιστές και τα
Διαβάστε περισσότερα3 ο Εργαστήριο Μεταβλητές, Τελεστές
3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται
Διαβάστε περισσότεραΑ' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 1η εβδομάδα. Κοζάνη, 5 Οκτωβρίου 2007. Βασικά στοιχεία γραφής προγραμμάτων με τη C: α) Case Sensitive!!! β) Δυνατότητα εισαγωγής σχολίων με /*
Διαβάστε περισσότεραΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python
ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό με C++
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 9: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Κωνσταντίνος Κουκουλέτσος Τμήμα
Διαβάστε περισσότεραΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Δομή του προγράμματος Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις
Διαβάστε περισσότεραΥπερφόρτωση τελεστών (operator(
Υπερφόρτωση τελεστών (operator( overloading) Η υπερφόρτωση τελεστών είναι ένα από τα πιο ενδιαφέροντα χαρακτηριστικά του αντικειμενοστραφούς προγραμματισμού. Αναφέρεται στην πρόσθετη χρήση των συνηθισμένων
Διαβάστε περισσότεραΗ-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1
Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές Δρ. Γιώργος Λαμπρινίδης amprinidis@pharm.uoa.gr 1 Αριθμητικοί Τελεστές + πρόσθεση - αφαίρεση * πολλαπλασιασμός / διαίρεση Προσοχή! Διαίρεση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπερφόρτωση Αντικείμενα σαν ορίσματα ΥΠΕΡΦΟΡΤΩΣΗ H κλάση Car Μια κλάση που κρατάει την θέση ενός αυτοκινήτου. Μέθοδος move(): μετακινεί το αυτοκίνητο κατά μία
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Διαβάστε περισσότεραΙδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη
Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη Πώς βλέπουμε τις ιδιότητες των αντικειμένων που έχουμε δημιουργήσει; Ανοίγουμε το σενάριο CarWorld και δημιουργούμε μερικά αντικείμενα των κλάσεων
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Παρατηρήσεις
Διαβάστε περισσότεραΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Διαβάστε περισσότεραΓ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης
Γ7.1 Επανάληψη ύλης Β Λυκείου Γ Λυκείου Κατεύθυνσης Απλά προγράμματα Ένα πρόγραμμα στη C++ που υπολογίζει το άθροισμα 2 ακέραιων αριθμών. // simple program #include using namespace std; int main(){
Διαβάστε περισσότεραΠληροφορική 2. Γλώσσες Προγραμματισμού
Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
Διαβάστε περισσότερα2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ
ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)
Διαβάστε περισσότερα