Ενδεικτική περιγραφή μαθήματος

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

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

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Ενδεικτική περιγραφή μαθήματος

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Κλάσεις και Αντικείµενα

Streams Input / Output in C++ George Kastrinis

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

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

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΕΠΙΠΕΔΟ ΣΠΟΥΔΩΝ Προπτυχιακό ΚΩΔΙΚΟΣ ΜΑΘΗΜΑΤΟΣ GD2520

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

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Τι είναι κλάση Κλάση

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

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

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

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

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

Σύνθεση και Κληρονομικότητα

S, (5, -3, 34, -23, 7) ( *, _

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

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

Σύνθεση και Κληρονομικότητα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

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

Αναφορές, είκτες και Αλφαριθμητικά

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

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

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

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

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

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

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

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

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

Προγραμματιστικές τεχνικές

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

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή. 1 Γενικά. 2 Προγράμματα σε C++ 5 Νοεμβρίου 2012

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΘΕΜΑ: «Σχεδιασμός και ανάπτυξη ιστοσελίδων ηλεκτρονικής εκπαίδευσης (e learning) σε θέματα αντικειμενοστραφή προγραμματισμού.

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

Βασικά Στοιχεία της Java

Διαγράμματα Κλάσεων στη Σχεδίαση

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

Δεδομένα, τελεστές, είσοδος/έξοδος

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Τελικό τεστ - απαντήσεις

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γενικά (για τις γραπτές εξετάσεις)

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

Transcript:

ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή. Ο Bjarne Stroustrup, εργαζόμενος στα εργαστήρια Bell, ανέπτυξε την γλώσσα C++ βασιζόμενος στην γλώσσα C, στην περίοδο 1983-1985. Το 1997, μετά από προσθήκες και βελτιώσεις, οριστικοποιήθηκε και πιστοποιήθηκε το πρότυπο της γλώσσας. Σήμερα αποτελεί την γλώσσα επιλογής για τους περισσότερους προγραμματιστές για την ανάπτυξη πολύπλοκων εφαρμογών, σε κάθε λειτουργικό σύστημα. Η C++ αποτελεί ένα υπερσύνολο της C, επομένως ένα πρόγραμμα σε C μεταγλωττίζεται από μεταγλωττιστή (compiler) της C++. Η C++ κληρονόμησε από την C και την μεγάλη ελευθερία με περιορισμένο έλεγχο λαθών, που δίνει ελευθερία, ευελιξία, αποδοτικό κώδικα αλλά δεν συγχωρεί τις απροσεξίες. Μαζί με την Java και την C# είναι οι πιο δημοφιλείς γλώσσες αντικειμενοστρεφούς προγραμματισμού (Object Oriented Programming). Η C++ υποστηρίζει τα χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού: αφαιρετικότητα (abstraction), ενθυλάκωση (encapsulation), πολυμορφισμό (polymorphism), κληρονομικότητα (iheritance). Υπερφόρτωση (του ονόματος) συνάρτησης. Με την υπερφόρτωση μπορούμε να έχουμε μέσα στο ίδιο πρόγραμμα 2 ή περισσότερους ορισμούς συναρτήσεων με το ίδιο όνομα. Οι συναρτήσεις πρέπει να διαφέρουν: είτε ως προς τον τύπο των παραμέτρων τους είτε ως προς τον αριθμό των παραμέτρων τους. Εξ' ορισμού (προκαθορισμένη) τιμή παραμέτρου. Στην C++ μπορούμε να δώσουμε προκαθορισμένες τιμές σε παραμέτρους συνάρτησης. Σε αυτή την περίπτωση μπορούμε να καλέσουμε την συνάρτηση παραλείποντας το αντίστοιχο όρισμα, για το οποίο θα χρησιμοποιηθεί η προκαθορισμένη τιμή. Αναφορικές μεταβλητές. Μια αναφορική μεταβλητή (reference variable) δηλώνεται όπως και μια συνηθισμένη μεταβλητή, αλλά με το σύμβολο & πριν το όνομά της. Μια αναφορική μεταβλητή αναφέρεται σε μια άλλη μεταβλητή. Η μεταβλητή αυτή, της ανατίθεται κατά τη δήλωσή της: int &y; int x; int &y = x;

Ουσιαστικά, η αναφορική μεταβλητή y είναι ψευδώνυμο της x. Οι μεταβλητές x και y αναφέρονται στην ίδια θέση μνήμης. Η εντολή y=10 θα έχει σαν αποτέλεσμα να είναι 10 και τη τιμή της x (στην πραγματικότητα είναι η ίδια μεταβλητή στη μνήμη). Μπορούμε να βάλουμε σαν παραμέτρους συνάρτησης αναφορικές μεταβλητές. Αυτό συνεπάγεται ότι μεταβολές στις τιμές των παραμέτρων της συνάρτησης εφαρμόζονται και στις τιμές των ορισμάτων. 2. Κλάσεις, αντικείμενα. Μια κλάση (class) προσδιορίζει μια κατηγορία (κλάση) αντικειμένων, περιγράφοντας τις λειτουργίες και τα χαρακτηριστικά τους. class pelatis { private: string onoma; double poso_katathesis; public: }; void set_onoma(string on); void set_poso(double p); double give_toko(); Ένα αντικείμενο (object) μιας κλάσης έχει όλες τις λειτουργίες και χαρακτηριστικά της κλάσης στην οποία ανήκει. Λέμε ότι ένα αντικείμενο αποτελεί ένα στιγμιότυπο (instance) μιας κλάσης. int main() { } pelatis p1, p2; Οι κλάσεις έχουν παρόμοιο ορισμό με τις δομές. Σαν προσδιοριστικό χρησιμοποιείται η λέξη class. Μια κλάση αποτελείται από μεταβλητές-μέλη και από συναρτήσεις-μέλη. Ο ορισμός πρέπει να τελειώνει με ένα ελληνικό ερωτηματικό. Ο τελεστής :: ονομάζεται τελεστής επίλυσης εμβέλειας και χρησιμοποιείται όταν αναφερόμαστε σε μια οντότητα που έχει οριστεί σε άλλο χώρο εμβέλειας. Η πρόσβαση στα μέλη ενός αντικειμένου γίνεται με τον τελεστή-τελεία: «.» Γράφουμε πρώτα το όνομα του αντικειμένου, έπειτα την τελεία και έπειτα την μεταβλητή-μέλος. Αυτό ισχύει και για την κλήση συναρτήσεων-μελών, και τότε λέμε ότι: εφαρμόζουμε την μέθοδο στο αντικείμενο ή στέλνουμε το μήνυμα στο αντικείμενο.

Private και public μεταβλητές και συναρτήσεις: Τα μέλη μιας κλάσης μπορεί να είναι δημόσια ή ιδιωτικά (θα δούμε και το προσδιοριστικό προστατευμένα (protected) στην κληρονομικότητα). Στα δημόσια υπάρχει πρόσβαση και από συναρτήσεις που δεν είναι μέλη της κλάσης. Τα δημόσια δηλώνονται κάτω από το προσδιοριστικό: public. Στα ιδιωτικά επιτρέπεται πρόσβαση μόνο από τις συναρτήσεις-μέλη της κλάσης. Τα ιδιωτικά δηλώνονται κάτω από το προσδιοριστικό: private. Πότε χρησιμοποιούμε κλάσεις. 3. Constructors (default και μη) και destructors. Μέθοδοι δόμησης/κατασκευής (constructors). Μια μέθοδος δόμησης ή κατασκευής σε κλάση χρησιμεύει στο να αρχικοποιεί μεταβλητές της, να δεσμεύει δυναμικά μνήμη και γενικά να εκτελεί ενέργειες που απαιτούνται κατά τη δημιουργία κάθε αντικειμένου. Καλείται αυτόματα κατά τη δημιουργία (δήλωση) κάθε αντικειμένου της κλάσης. Απαραίτητα έχει ίδιο όνομα με την κλάση. Μπορεί να έχει καμία ή περισσότερες παραμέτρους. Μια κλάση μπορεί να έχει πολλές μεθόδους δόμησης (υπερφόρτωση συνάρτησης). Δεν έχει τύπο επιστροφής, ούτε void. Απαραίτητα πρέπει να είναι δημόσια (public). Μια κλάση δεν είναι απαραίτητο να έχει δηλωμένη μέθοδο δόμησης από τον προγραμματιστή. Μέθοδος αποδόμησης/καταστροφής (destructor). Μια μέθοδος αποδόμησης ή καταστροφής σε κλάση χρησιμεύει στο να αποδεσμεύει δυναμικά μνήμη και γενικά να εκτελεί ενέργειες που απαιτούνται κατά το σβήσιμο από την μνήμη κάθε αντικειμένου. Καλείται αυτόματα κατά την καταστροφή κάθε αντικειμένου της κλάσης, δηλαδή όταν λήξει ο χώρος εμβέλειάς του. Απαραίτητα έχει ίδιο όνομα με την κλάση, αλλά με το σύμβολο ~ πριν το όνομά της. Δεν επιτρέπεται να έχει παραμέτρους. Μια κλάση μπορεί να έχει μόνο μία μέθοδο αποδόμησης. Δεν έχει τύπο επιστροφής, ούτε void. Απαραίτητα πρέπει να είναι δημόσια (public). Μια κλάση δεν είναι απαραίτητο να έχει δηλωμένη μέθοδο αποδόμησης από τον προγραμματιστή. Όπως κάθε συνάρτηση της C++, έτσι και οι μέθοδοι μιας κλάσης μπορούν να έχουν προκαθορισμένες τιμές. Το ίδιο φυσικά ισχύει και για τις μεθόδους δόμησης. Υπερφόρτωση συναρτήσεων. 4. Δείκτες και δυναμική δέσμευση και αποδέσμευση μνήμης (new και delete). Μπορούμε να δεσμεύσουμε δυναμικά μνήμη σε ένα πρόγραμμα της C++, χρησιμοποιώντας δείκτες. Δεσμεύουμε μνήμη για ένα αριθμό τύπου double, χρησιμοποιώντας τη new. Ο δείκτης θα δείξει στη δεσμευμένη μνήμη. Αποδεσμεύουμε μνήμη με delete. 5. Κληρονομικότητα απλή και πολλαπλή. Με την κληρονομικότητα μπορούμε να δημιουργήσουμε μια νέα κλάση από μια προϋπάρχουσα κλάση. Η

προϋπάρχουσα κλάση ονομάζεται: βασική κλάση ή γονέας. Η νέα κλάση ονομάζεται: παράγωγη κλάση ή απόγονος. Η παράγωγη κλάση «κληρονομεί» (σχεδόν όλα) τα χαρακτηριστικά (μεταβλητές και συναρτήσεις) της βασικής κλάσης. Η παράγωγη κλάση μπορεί να έχει επιπλέον χαρακτηριστικά (μεταβλητές και συναρτήσεις) ή να επαναπροσδιορίσει τα κληρονομούμενα. Η βασική κλάση δεν επηρεάζεται σε κάτι. Η παράγωγη κλάση, ενώ κληρονομεί τις μεταβλητές και συναρτήσεις της βασικής κλάσης, ΔΕΝ έχει άμεση πρόσβαση σε ότι είναι private. Κληρονομικότητα public, private και protected. Ότι είναι δηλωμένο σαν private μέσα σε μια κλάση, δεν μπορεί να προσπελαστεί άμεσα παρά μόνο από την ίδια την κλάση (δηλαδή, τις συναρτήσεις της). Για να διατηρήσουμε αυτό το χαρακτηριστικό κατά την κληρονομικότητα υπάρχει ο προσδιοριστής protected. Τα μέλη της βασικής κλάσης που είναι protected είναι προσβάσιμα μόνο από την ίδια την κλάση (σαν να είναι private) ΑΛΛΑ επιπλέον είναι άμεσα προσβάσιμα και από κάθε παράγωγή της κλάση. Επίπεδα κληρονομικότητας: Είναι δυνατό μια παράγωγη-κλάση να αποτελέσει τον γονέα μιας επόμενης παράγωγης-κλάσης. Και αυτό μπορεί να συνεχίζεται. Πολλαπλή κληρονομικότητα: Είδαμε ότι μια παράγωγη-κλάση (απόγονος) έχει μία βασική-κλάση (γονέα). Είναι δυνατό μια παράγωγη-κλάση να έχει περισσότερες από μία βασικές-κλάσεις (γονείς). Οι πιθανότητες για ασάφεια είναι πολλές. 6. Φιλικές συναρτήσεις. Μια φιλική συνάρτηση ΔΕΝ είναι συνάρτηση-μέλος μιας κλάσης. Ωστόσο, έχει άμεση πρόσβαση στις private και protected μεταβλητές αλλά και στις συναρτήσεις της κλάσης. Μια συνάρτηση χρειάζεται να είναι φιλική μιας κλάσης, μόνο αν πρέπει να έχει πρόσβαση σε ιδιωτικά μέλη της κλάσης αυτής. Χρειαζόμαστε ξεχωριστή έκδοση υπερφόρτωσης τελεστή, ανάλογα με το είδος ή το πλήθος των παραμέτρων. Ο δείκτης this: Όταν καλείται μια συνάρτηση (μέθοδος) μιας κλάσης, τότε στην συνάρτηση αυτή μεταβιβάζεται αυτόματα ένας δείκτης που ονομάζεται: this, ο οποίος δείχνει στο αντικείμενο το οποίο κάλεσε την συνάρτηση. Ο δείκτης this, έχει εμβέλεια μόνο μέσα στην συνάρτηση αυτή και μπορεί να χρησιμοποιηθεί για να έχει έμμεση πρόσβαση στα μέλη του αντικειμένου που την κάλεσε. Η τιμή του δείκτη this, δεν μπορεί να αλλαχθεί. Ο δείκτης this, δεν μεταβιβάζεται στις φιλικές συναρτήσεις μιας κλάσης (ούτε στις στατικές). Πολυμορφισμός. Υποθέστε ότι έχουμε δημιουργήσει 2 κλάσεις, που η μία είναι απόγονος της άλλης. π.χ. κλάση-γονέας: Car και κλάση-απόγονος: SportsCar Και στη συνέχεια δηλώνουμε 2 αντικείμενα, ένα για κάθε κλάση: Car c( Volvo, 220); SportsCar sc( Porsche, 350, 400); Αν βάλουμε τον δείκτη Car να δείξει σε αντικείμενο SportsCar:

Car *cptr = &sc; τότε η κλήση της συνάρτησης print() μέσω ενός δείκτη της βασικής (γονικής) κλάσης (της Car) ενεργοποιεί πάντα την print() της γονικής κλάσης, ΑΣΧΕΤΩΣ αν ο δείκτης δείχνει σε αντικείμενο της κλάσηςαπογόνου, όπως παραπάνω. Όμως θα θέλαμε, ο δείκτης να είναι της βασικής κλάσης αλλά να καλείται η σωστή συνάρτηση print() ανάλογα με το αντικείμενο στο οποίο δείχνει αυτός ο δείκτης. Δηλαδή, αν το αντικείμενο είναι τύπου Car να καλείται η Car::print(), ενώ αν το αντικείμενο είναι τύπου SportsCar να καλείται η SportsCar::print(). Αν η συνάρτηση print() δηλωθεί σαν εικονική ή υπερβατή (virtual) στη βασική κλάση, θα το πετύχουμε: class Car { private: public: }; virtual void print(); Εικονικές συναρτήσεις (virtual) και αμιγώς εικονικές (pure virtual). Υπάρχουν περιπτώσεις όπου δεν θέλουμε να δημιουργήσουμε αντικείμενα από μια κλάση. Οι κλάσεις αυτού του είδους ονομάζονται αφηρημένες (abstract). Σκοπός της ύπαρξής της είναι να αποτελέσει μια βασική κλάση από την οποία οι παράγωγες κλάσεις (απόγονοι) θα υιοθετήσουν χαρακτηριστικά (μεταβλητές) και συμπεριφορά (συναρτήσεις). Μια κλάση καθίσταται αφηρημένη αν δηλώσουμε μία ή περισσότερες από τις virtual συναρτήσεις σαν αμιγείς (pure). Μια αμιγώς εικονική (pure virtual) συνάρτηση είναι εκείνη που όταν τη δηλώνουμε, την αρχικοποιούμε ως ίση με μηδέν. 7. Υπερφόρτωση τελεστών. Υπερφόρτωση μονομελών τελεστών. Υπερφόρτωση του τελεστή ανάθεσης = (ο τελεστής = μπορεί να χρησιμοποιηθεί για την ακριβή, bit-προς-bit, αντιγραφή ενός αντικειμένου σε άλλο. Τα αντικείμενα πρέπει να ανήκουν στην ίδια κλάση. Είναι προβληματική αν τα αντικείμενα δεσμεύουν δυναμικά μνήμη. Τότε πρέπει να τον υπερφορτώσουμε, ώστε να μην λειτουργήσει με τον προκαθορισμένο τρόπο). Υπερφόρτωση του τελεστή (). Με την υπερφόρτωση αυτού του τελεστή δεν αλλάζει ο τρόπος κλήσης των συναρτήσεων. Με αυτόν όμως μπορούμε να αναφερόμαστε σε αντικείμενα, περνώντας τους τιμές και εφαρμόζοντας πάνω τους πράξεις, σαν να ήταν συναρτήσεις. Υπερφόρτωση του τελεστή []. Τυπικά αυτός ο τελεστής δίνει προσπέλαση στα στοιχεία ενός πίνακα. Μπορεί να υπερφορτωθεί ώστε να δίνει προσπέλαση σε μεταβλητές-μέλη κλάσης. Δεν είναι απαραίτητο αυτές οι μεταβλητές-μέλη να ανήκουν σε πίνακα. Χώροι ονομάτων (namespaces).

Ένας χώρος ονομάτων είναι μια εμβέλεια, δηλαδή ένας χώρος μέσα σε ένα πρόγραμμα στον οποίο ισχύουν κάποιες μεταβλητές ή συναρτήσεις, κλπ. Ένας χώρος ονομάτων περιέχει «πακεταρισμένες» δηλώσεις μεταβλητών, σταθερών και συναρτήσεων, κλάσεων, αντικειμένων, όλα κάτω από ένα όνομα. Μπορούμε να χρησιμοποιήσουμε σε ένα πρόγραμμα όλο τον χώρο ονομάτων ή τμήμα του, εύκολα. Για να κάνουμε διαθέσιμα τα ονόματα που δηλώθηκαν μέσα σε ένα namespace έχουμε 2 τρόπους: Να χρησιμοποιήσουμε τον τελεστή επίλυσης εμβέλειας διπλή άνω-κάτω τελεία (::) ή να χρησιμοποιήσουμε το using. Ο ορισμός ενός χώρου ονομάτων γίνεται μία φορά, αλλά μπορούμε να προσθέσουμε νέα στοιχεία σε αυτόν στη συνέχεια. Σύμφωνα με το standard της C++, καταργείται η σύμβαση τα αρχεία επικεφαλίδας της standard βιβλιοθήκης να έχουν κατάληξη.h και όλα τα ονόματα που ορίζονται ή δηλώνονται από αυτή να βρίσκονται μέσα σε ένα namespace που ονομάζεται std. Φωλιασμένοι χώροι ονομάτων: Επιτρέπεται η δημιουργία ενός χώρου ονομάτων μέσα σε έναν άλλο. 8. Αρχεία (ifstrem, ofstream, κλπ). Στην γλώσσα C++ η είσοδος και η έξοδος γίνεται μέσω ρευμάτων (streams). Το ρεύμα είναι μια λογική διασύνδεση του προγράμματος με συσκευές του Η/Υ. Μπορούν να θεωρηθούν σαν κανάλια για την μεταφορά δεδομένων. Ένα ρεύμα εισόδου δέχεται δεδομένα (bytes) από μια περιφερειακή συσκευή (πληκτρολόγιο, αρχείο σε δίσκο). Ένα ρεύμα εξόδου στέλνει δεδομένα (bytes) σε μια συσκευή εξόδου (οθόνη, αρχείο, εκτυπωτή). Υπάρχουν και ρεύματα εισόδου-εξόδου που στέλνουν και δέχονται δεδομένα από/σε συσκευή (αρχείο, μόντεμ). Ένα ρεύμα είναι ένα αντικείμενο μιας συγκεκριμένης κλάσης ρευμάτων. Ανάλογα με το είδος του ρεύματος που θέλουμε, δημιουργούμε αντικείμενο της αντίστοιχης κλάσης. Κάποια ρεύματα είναι ήδη συνδεδεμένα με συγκεκριμένες περιφερειακές συσκευές, χωρίς να απαιτείται ενέργεια από τον προγραμματιστή. Τα προκαθορισμένα ρεύματα αντιπροσωπεύονται από τα αντικείμενα: cin, cout, cerr, clog. Ο τελεστής << εισάγει πληροφορίες σε ένα ρεύμα εξόδου. Ο τελεστής >> εξάγει πληροφορίες από ένα ρεύμα εισόδου. Οι τελεστές >> και << μπορούν να υπερφορτωθούν για δικές μας κλάσεις. Μορφοποιημένη είσοδος - έξοδος. Η C++ επιτυγχάνει μορφοποιημένη είσοδο έξοδο με τους εξής τρόπους: σημαίες μορφοποίησης (format flags) και χειριστές (manipulators) και μεθόδους (methods), δηλαδή συναρτήσεις-μέλη κλάσεων. Στη C++ υπάρχουν οι εξής κλάσεις ρευμάτων για είσοδο και έξοδο σε αρχεία: ifstream ofstream για ανάγνωση από αρχείο για εγγραφή σε αρχείο

fsteram για ταυτόχρονη ανάγνωση και εγγραφή σε αρχείο Χρειαζόμαστε το αρχείο επικεφαλίδας fstream. Αρχεία κειμένου (text). Σε δυαδικά αρχεία (binary) η είσοδος/έξοδος είναι μη-μορφοποιημένη. Με την τυχαία προσπέλαση μπορούμε να διαβάζουμε και γράφουμε ξεκινώντας από οποιοδήποτε σημείο του αρχείου. Τα αρχεία πρέπει να ανοίγουν σε δυαδική μορφή. Οι μέθοδοι seekg() και seekp() επιτρέπουν την τοποθέτηση των δεικτών ανάγνωσης και εγγραφής, αντίστοιχα, σε οποιοδήποτε σημείο (byte) του αρχείου. Οι μέθοδοι tellg() και tellp() επιστρέφουν τις τιμές των τρεχουσών θέσεων των δεικτών αυτών. Εξαιρέσεις. Οι εξαιρέσεις είναι σφάλματα τα οποία πιθανόν να παρουσιαστούν κατά την εκτέλεση ενός προγράμματος. Η C++ διαθέτει αυτοματοποιημένο, δομημένο, ελεγχόμενο τρόπο χειρισμού των εξαιρέσεων, επιτρέποντας ένα ενιαίο σύστημα διαχείρισης σφαλμάτων στο πρόγραμμα. Κάθε φορά που παρουσιάζεται μια εξαίρεση ενεργοποιείται μια σημαία σφάλματος. Η ενεργοποίηση της σημαίας καλείται δημιουργία, έγερση ή κατάθεση (throw) εξαίρεσης. Ένα σύστημα παρακολουθεί συνέχεια εάν ενεργοποιήθηκε αυτή η σημαία, οπότε και καλεί τον κώδικα χειρισμού του σφάλματος. Το σύστημα χειρισμού εξαιρέσεων συλλαμβάνει (catch) την εξαίρεση και εκτελεί τον κώδικα που ο προγραμματιστής όρισε να διαχειριστεί το συγκεκριμένο σφάλμα. Για να μπορέσει να συλληφθεί (catch) μια εξαίρεση, πρέπει αυτή να δημιουργηθεί μέσα σε ένα τμήμα δοκιμής (try-block). 9. Ειδικά θέματα γλώσσας C/C++. Αλήθεια και ψέμα, συντομογραφίες τελεστών (+=, -=, *=, /=, %=), ο τελεστής κόμμα (όταν γράφουμε πολλές εκφράσεις στην ίδια εντολή, χωρισμένες μεταξύ τους με κόμμα, τότε εκτελούνται από αριστερά προς τα δεξιά με τη σειρά), ο τελεστής υποσυνθήκη (?:), αναδρομικές συναρτήσεις (ονομάζονται οι συναρτήσεις που καλούν τον εαυτό τους). Ένωση (union), είναι μια μορφή δομής (structure). Ωστόσο, οι μεταβλητές που περιλαμβάνει η ένωση αποθηκεύονται στις ίδιες θέσεις μνήμης, επικαλύπτοντας η μια την άλλη. typedef: Με την typedef μπορούμε να δηλώσουμε νέους τύπους στην C. Απαριθμήσεις (enumerations): Μια απαρίθμηση (enumaration) είναι ένας τρόπος για να ορίζουμε με συμβολικά ονόματα ακέραιες σταθερές. Ειδικοί τύποι μεταβλητών (auto, extern, static, register), και τροποποιητές τύπων (const, volatile). Τελεστές κατά δυαδικό ψηφίο: not, and, or, xor, shift right, shift left (~, &,, ^, >>, <<), εφαρμόζονται σε ακέραιους τύπους και επιδρούν στα bit τους.