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

Σχετικά έγγραφα
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διοικητική Λογιστική

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

Διοικητική Λογιστική

Βάσεις Περιβαλλοντικών Δεδομένων

Τεχνικό Σχέδιο - CAD

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Τεχνικό Σχέδιο - CAD

Εισαγωγή στην Πληροφορική

Διδακτική Πληροφορικής

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

Διδακτική Πληροφορικής

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

Διαχείριση Πολιτισμικών Δεδομένων

Διοικητική Λογιστική

Διδακτική Πληροφορικής

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

Εννοιες και Παράγοντες της Ψηφιακής Επεξεργασίας Εικόνας

Διδακτική Πληροφορικής

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

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

Εισαγωγή στην Πληροφορική

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Βάσεις Περιβαλλοντικών Δεδομένων

Διοικητική Λογιστική

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

Εισαγωγή στην Πληροφορική

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Τεχνολογία Πολιτισμικού Λογισμικού

Τεχνικό Σχέδιο - CAD

Διδακτική Πληροφορικής

ΠΕΡΙΒΑΛΛΟΝΤΙΚΗ ΠΟΛΙΤΙΚΗ & ΝΟΜΟΘΕΣΙΑ ΜΑΘΗΜΑ 1

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Προγραμματισμός Η/Υ. 7 η ενότητα: Αρχεία. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Βάσεις Περιβαλλοντικών Δεδομένων

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

Εισαγωγή στην Πληροφορική

Πληροφορική ΙΙ Θεματική Ενότητα 12

Εισαγωγή στην Πληροφορική

Βάσεις Περιβαλλοντικών Δεδομένων

Ασφάλεια Πληροφοριακών Συστημάτων

Τεχνολογία Πολιτισμικού Λογισμικού

Τεχνικό Σχέδιο - CAD

Εισαγωγή στην Πληροφορική

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στην Πληροφορική

Τεχνολογία Πολιτισμικού Λογισμικού

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

ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗ ΛΟΓΙΣΤΙΚΗ

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Ασφάλεια Πληροφοριακών Συστημάτων

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

Προγραμματισμός Η/Υ. 6 η ενότητα: Συναρτήσεις. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Τεχνικό Σχέδιο - CAD

ΔΙΟΙΚΗΣΗ ΔΙΕΘΝΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

Ασφάλεια Πληροφοριακών Συστημάτων

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

Βάσεις Περιβαλλοντικών Δεδομένων

Ασφάλεια Πληροφοριακών Συστημάτων

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

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

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στην Πληροφορική

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Διδακτική Πληροφορικής

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική

Οργάνωση και Λειτουργία Ταξιδιωτικής Βιομηχανίας Ι

Διδακτική Πληροφορικής

Βάσεις Περιβαλλοντικών Δεδομένων

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

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

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

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

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

Εισαγωγή στους Αλγορίθμους

Τεχνικό Σχέδιο - CAD

Διοικητική Λογιστική

Προγραμματισμός Η/Υ. Αλγόριθμοι. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Μηχανές Πλοίου ΙΙ (Ε)

Τεχνικό Σχέδιο - CAD

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

ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗ ΛΟΓΙΣΤΙΚΗ

Εισαγωγή στην Πληροφορική

Διδακτική Πληροφορικής

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

ΔΙΟΙΚΗΣΗ ΠΑΡΑΓΩΓΗΣ Ενότητα 5

ΟΙΚΟΝΟΜΙΚΑ ΜΑΘΗΜΑΤΙΚΑ

Ενότητα. Εισαγωγή στη Microsoft Access

Transcript:

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 6: Κατανομή και Δυναμική Διαχείριση Μνήμης, τελεστές new και delete, υπερφόρτωση μονομελών τελεστών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Αντικειμενοστραφής Προγραμματισμός Διάλεξη 6

Περιεχόμενα Δυναμική Διαχείριση μνήμης Τελεστές new και delete Υπερφόρτωση Τελεστών Υπερφόρτωση Μονομελών Τελεστών Προσωρινά Αντικείμενα και Επιθεματική Σημειογραφία μονομελών τελεστών

Δυναμική Διαχείριση Μνήμης Η εντολή int Α[100]; Δεσμεύει μνήμη για 100 ακέραιους. Οι πίνακες είναι μια χρήσιμη λύση στο θέμα της αποθήκευσης δεδομενων αλλά έχουν ένα σοβαρό μειονέκτημα: την ώρα που γράφουμε το πρόγραμμα, πρέπει να γνωρίζουμε πόσο μεγάλος είναι ο πίνακας. Σε πολλές περιπτώσεις όμως, μέχρι να εκτελεστεί το πρόγραμμα δε γνωρίζουμε πόση μνήμη θα χρειαστούμε

Τελεστές new και delete H C++ μας παρέχει ένα τελεστή για να δεσμεύουμε μνήμη: τον τελεστή new. Για την αποδέσμευση της μνήμης χρησιμοποιούμε τον τελεστή delete.

Παράδειγμα class mstring{ public: mstring(char *s); ~mstring(); void print(); private: char *str; };

Παράδειγμα mstring::mstring(char *s) { int len = strlen(s); str = new char[len+1]; strcpy(str,s); } mstring::~mstring() { cout<< Free memory <<endl; delete [] str; }

Υπερφόρτωση Τελεστών Η C++ μας δίνει τη δυνατότητα να χρησιμοποιήσουμε τους συνήθεις τελεστές (πχ. +,-) για να εκτελέσουμε λειτουργίες πάνω σε κλάσεις, εκτός από τους συνήθεις τύπους δεδομένων (πχ. int). Παράδειγμα: Μέχρι τώρα ξέρουμε ότι μπορούμε να χρησιμοποιήσουμε τον τελεστή + για την πρόσθεση 2 ακεραίων, αλλά δε μπορούμε να τον χρησιμοποιήσουμε για την πρόσθεση 2 αντικείμενων της κλάσης Counter που ορίσαμε στο προηγούμενο μάθημα

Υπερφόρτωση Τελεστών Η υπερφόρτωση τελεστών μας δίνει τη δυνατότητα να προσθέτουμε επιπλέον δυνατότητες στους ήδη υπάρχοντες τελεστές. Μια εντολή όπως η d3 = d3.addobjects(d1,d2); Μπορεί να μετατραπεί στην πιο ευανάγνωστη d3 = d1 + d2

Υπερφόρτωση μονομελών τελεστών Οι μονομελείς τελεστές επενεργούν σε έναν μόνο τελεστέο Παραδείγματα μονομελών τελεστών είναι οι τελεστές αύξησης και μείωσης, ++ και --. Στο παράδειγμα με τη κλάση Counter δημιουργήσαμε μια κλάση για να παρακολοθούμε μια μέτρηση. Τα αντικείμενα αυτής της κλάσης αυξανονταν με την κλήση της μεθόδου count1. c1.count1(); Ωστόσο, το πρόγραμμα μας θα ήταν πιο ευανάγνωστο αν γράφαμε: ++c1; Προσοχή: ο τελεστής ++ ενεργεί πάνω σε ένα αντικείμενο της Counter. Η C++ δεν ξέρει πως να το κάνει αυτό. Για να το μάθει πρέπει να υπερφόρτωσουμε τον τελεστή

Υπερφόρτωση μονομελών τελεστών Πώς μαθαίνουμε σε ένα κανονικό τελεστή της C++ να ενεργεί σε έναν τελεστέο που ορίζεται από τον χρήστη; Χρησιμοποιούμε την δεσμευμένη λέξη operator στη δήλωση της μεθόδου Παράδειγμα: void operator++(); Αυτή η σύνταξη λέει στον μεταγλωτιστή να καλέσει τη συνάρτηση μέλος όταν συνατήσει τον τελεστή ++ εφόσον ο τελεστέος είναι αντικέιμενο τύπου Counter

Υπερφόρτωση μονομελών τελεστών class Counter{ public: int get_count(); void set_count(int a); void operator++(); private: int count; };

Υπερφόρτωση μονομελών τελεστών int Counter::get_count() { return count; } void Counter::set_count(int a) { count = a; } void Counter::operator++() { ++count; }

Υπερφόρτωση μονομελών τελεστών int main() { Counter c1; } c1.set_count(0); cout<<"counter Value:"<<c1.get_count()<<endl; ++c1; cout<<"counter Value:"<<c1.get_count()<<endl; return 0;

Υπερφόρτωση μονομελών τελεστών Η συνάρτηση operator++ έχει ένα μικρό ελάττωμα. Θα το ανακαλύψετε αν χρησιμοποιήσετε μια εντολή όπως η c1=++c2; Όπως ορίσαμε τον τελεστή ++ δέν έχει επιστρεφόμενο τύπο. Συνεπώς, δε μπορούμε να χρησιμοποιήσουμε τον τελεστή σε εντολές απόδοσης τιμής. Φυσικά, ο κανονικός τελεστής ++ δεν έχει αυτό το πρόβλημα.

Υπερφόρτωση μονομελών τελεστών Counter Counter::operator++() { ++count; Counter temp; temp.count = count; return temp; }

Προσωρινά Αντικείμενα Στο προηγούμενο παράδειγμα χρησιμοποιήσαμε ένα προσωρινό αντικέιμενο τύπου Counter, το temp, που είχε ως σκοπό να παρέχει μια επιστρεφόμενη τιμή στη μέθοδο. Υπάρχουν ευκολότεροι τρόποι να επιστρέφουμε προσωρινά αντικείμενα από μεθόδους και υπερφορτωμένους τελεστές κάνοντας χρήση των συναρτήσεων δημιουργίας.

Προσωρινά Αντικείμενα class Counter{ public: Counter(); Counter(int a); ~Counter(); int get_count(); void set_count(int a); Counter operator++(); private: int count; };

Προσωρινά Αντικείμενα Counter Counter::operator++() { ++count; return Counter(count); }

Επιθεματική Σημειογραφία Μέχρι τώρα είδαμε τη χρήση του τελεστή αύξησης με τη μορφή προθέματος ++c1 Τι γίνεται με τη μορφή επιθέματος; c1++; Για να μπορέσουν να δουλέψουν και οι δύο εκδοχές του τελεστή αύξησης, ορίζουμε δύο υπερφορτμένους τελεστές ++

Επιθεματική Σημειογραφία class Counter{ public: Counter(); Counter(int a); ~Counter(); int get_count(); void set_count(int a); Counter operator++(); Counter operator++(int); private: int count; };

Επιθεματική Σημειογραφία Counter Counter::operator++() { return Counter(++count); } Counter Counter::operator++(int) { return Counter(count++); }

Επιθεματική Σημειογραφία Υπάρχουν δύο διαφορετικές μέθοδοι για την επιφόρτωση του τελεστή ++. Counter operator++(); Counter operator++(int); Η μόνη διαφορά είναι το int στις παρενθέσεις. Αυτό το int δεν είναι στην πραγματικότητα όρισμα και δεν σημαίνει ακέραιο αριθμό. Είναι απλώς ένα σήμα προς τον μεταγλωττιστή να δημιουργήσει μια επιθεματική εκδοχή του τελεστή.

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

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.