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

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

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

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

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

Εναλλακτικές εντολές για ανάγνωση/εγγραφή

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Pascal. 15 Νοεμβρίου 2011

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Δομές Δεδομένων

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

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

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

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

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

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΚΕΦΑΛΑΙΟ 2. Τιμές, τύποι, μεταβλητές, λέξεις-κλειδιά, εντολές. 2.1 Εισαγωγή

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

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

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Μαλούτα Θεανώ Σελίδα 1

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

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

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

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

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

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Συναρτήσεις. Υποπρόγραμμα

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

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

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

Κατανεμημένα Συστήματα

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Ειδικά Θέματα Προγραμματισμού

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

10 η Διάλεξη C++ - Πίνακες. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

Τιμή Τιμή. σκορ. ζωές

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

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

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Transcript:

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

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ......................................................... 3 ΚΕΦΑΛΑΙΟ 1 Κεφάλαιο 1 - Δήλωση Τάξεων........................................ 4 Κεφάλαιο 1 - Δήλωση Μεταβλητών Private / Public....................... 6 Κεφάλαιο 1 - Ερωτηματολόγιο........................................ 8 Κεφάλαιο 1 - Απαντήσεις Ερωτήσεων................................. 10 ΚΕΦΑΛΑΙΟ 2 Κεφάλαιο 2 - Δομητές / Αποδομητές...................................12 Κεφάλαιο 2 - Ερωτηματολόγιο....................................... 14 Κεφάλαιο 2 - Απαντήσεις Ερωτήσεων................................. 16 ΚΕΦΑΛΑΙΟ 3 Κεφάλαιο 3 - Κληρονομικότητα......................................18 Κεφάλαιο 3 - Υπέρβαση & Απόκρυψη συναρτήσεων..................... 21 Κεφάλαιο 3 - Ερωτηματολόγιο....................................... 23 Κεφάλαιο 3 - Απαντήσεις Ερωτήσεων................................. 27 ΚΕΦΑΛΑΙΟ 4 Κεφάλαιο 4 - Πολυμορφισμός....................................... 30 Κεφάλαιο 4 Ιδεατές (virtual) συναρτήσεις............................. 33 Κεφάλαιο 4 - Ερωτηματολόγιο....................................... 37 Κεφάλαιο 4 - Απαντήσεις Ερωτήσεων................................. 41 ΒΙΒΛΙΟΓΡΑΦΙΑ................................................... 44 2

Εισαγωγή Σε αυτήν την πτυχιακή εργασία δημιουργήθηκε μία «ιστοσελίδα» για την εκμάθηση του αντικειμενοστραφούς προγραμματισμού με τη βοήθεια του διαδικτύου. Με τον τρόπο αυτό, ο κάθε ένας που ενδιαφέρεται να αποκτήσει κάποιες πληροφορίες γύρω από την γλώσσα προγραμματισμού (C++),μπορεί να επισκεφθεί το site και να εμπλουτίσει τις γνώσεις του. Η διδασκαλία αυτή είναι οργανωμένη σε 4 κεφάλαια ξεκινώντας από τις πιο απλές έννοιες. Έμφαση δίνεται στην παρουσίαση των βασικών εννοιών γιατί θεωρήσαμε ότι ο αναγνώστης δεν έχει κάποια προηγούμενη εμπειρία στον προγραμματισμό. Στο τέλος κάθε κεφαλαίου υπάρχουν ερωτήσεις για την κατανόηση των όσων θεωρητικών είχαν προηγηθεί πιο πάνω. Σε αυτήν την έντυπη μορφή υπάρχουν όλα τα στοιχεία της θεωρίας, καθώς και τα ερωτηματολόγια χωρίς όμως να υπάρχουν τα σχετικά links μεταφοράς μας από την μία σελίδα στην άλλη ή βλέποντας τις απαντήσεις κτλ. Όλοι μας έχουμε χρησιμοποιήσει προγράμματα υπολογιστών, όπως είναι ένας επεξεργαστής κειμένου, ένα λογιστικό πρόγραμμα ή το περιβάλλον των Windows. Τα προγράμματα των υπολογιστών, ή λογισμικό (software), είναι αρχεία που περιέχουν εντολές οι οποίες λένε στον υπολογιστή τι να κάνει. Με άλλα λόγια, τα αρχεία περιέχουν συγκεκριμένες εντολές, τις οποίες ο υπολογιστής εκτελεί μία μία, για να πραγματοποιήσει την εργασία που θέλετε. Όταν δημιουργείτε ένα πρόγραμμα καθορίζεται τις εντολές που θέλετε να εκτελέσει ο υπολογιστής για να πάρετε το επιθυμητό αποτέλεσμα. Προγραμματισμός είναι η διαδικασία δημιουργίας μιας λίστας εντολών τις οποίες ο υπολογιστής πρέπει να εκτελέσει για να πραγματοποιήσει μία συγκεκριμένη εργασία. Για να καθορίσετε αυτές τις εντολές χρησιμοποιείτε μία γλώσσα προγραμματισμού όπως είναι η C++. Καλή σας Συνέχεια! Επόμενη Σελίδα => 3

Κεφάλαιο 1 Δήλωση Τάξεων Η C++ χρησιμοποιεί μία τάξη (class) για να αποθηκεύει τα δεδομένα ενός αντικειμένου και τις πράξεις που μπορούν να εκτελούνται πάνω σ αυτά τα δεδομένα.όταν κάνετε αντικειμενοστραφή προγραμματισμό, επικεντρώνετε την προσοχή σας στα πράγματα που αποτελούν ένα σύστημα και στις πράξεις που πρέπει να εκτελείτε σ αυτά τα πράγματα. Για παράδειγμά θα μπορούσατε να έχετε πράξεις που τυπώνουν, εμφανίζουν στην οθόνη, διαγράφουν, ή τροποποιούν ένα αρχείο. Στη C++, χρησιμοποιείται μία τάξη για να ορίσετε τα αντικείμενα σας. Σκοπός σας είναι να συμπεριλάβετε στην τάξη όσο περισσότερες πληροφορίες μπορείτε για το αντικείμενο. Έτσι μπορείτε να πάρετε μία τάξη που δημιουργήσατε για κάποιο πρόγραμμα και να τη χρησιμοποιήσετε σε πολλά προγράμματα. Σε μία τάξη αποθηκεύονται δεδομένα, καθώς και συναρτήσεις που εκτελούν διάφορες πράξεις πάνω στα δεδομένα. Όπως μία δομή, κάθε τάξη της C++ έχει ένα μοναδικό όνομα, που ακολουθείται από μία αγκύλη ανοίγματος, ένα ή περισσότερα μέλη, και μία αγκύλη κλεισίματος. Αφού ορίσετε μία τάξη, μπορείτε να δηλώσετε μεταβλητές του συγκεκριμένου τύπου τάξης, που ονομάζονται αντικείμενα (objects). (βλέπε εικόνα 1) Εικόνα 1 4

Στη συγκεκριμένη περίπτωση, η τάξη περιέχει τρία μέλη που είναι μεταβλητές και ένα μέλος που είναι συνάρτηση και εκτυπώνει τις τρεις μεταβλητές όταν την καλούμε.στην συνέχεια στο κυρίως πρόγραμμα δημιουργήτε το πρώτο αντικείμενο της τάξης μας, και βάζουμε τιμές στις μεταβλητές. Τέλος καλούμε την συνάρτηση για να εκτυπώσει τα στοιχεία που είχαμε κάνει εισαγωγή προηγουμένος στην τάξη μας. Γενικά στοιχεία τάξεων: Τα προγράμματα της C++ αναπαριστούν τα αντικείμενα χρησιμοποιώντας μία τάξη. Μία τάξη όπως και μία δομή περιέχει μέλη. Τα μέλη μιας τάξης μπορούν να αποθηκεύουν πληροφορίες (δεδομένα) ή να είναι συναρτήσεις που επενεργούν πάνω στα δεδομένα (μέθοδοι). Κάθε τάξη έχει ένα μοναδικό όνομα. Αφού ορίσετε μία τάξη, μπορείτε να δηλώσετε τα αντικείμενα της, χρησιμοποιώντας το όνομα της τάξης σαν τύπο. Για να προσπελάσετε μέλη της τάξης, χρησιμοποιείτε τον τελεστή τελείας. Μία συνάρτηση μέλος μιας τάξης μπορεί να οριστεί μέσα ή έξω από τον ορισμό της τάξης. Αν ορίσετε τη συνάρτηση έξω από τον ορισμό της τάξης, πρέπει να προσδιορίσετε το όνομα της τάξης και να χρησιμοποιήσετε τον τελεστή διάκρισης εμβέλειας, με την μορφή τάξη::συνάρτηση. Επόμενη Σελίδα => 5

Κεφάλαιο 1 Δήλωση Μεταβλητών Private / Public Για να χρησιμοποιήσετε μία τάξη, τα προγράμματά σας αρκεί να ξέρουν τις πληροφορίες που αποθηκεύονται στην τάξη (μέλη δεδομένων), και τις μεθόδους που πραγματοποιούν το χειρισμό των δεδομένων (συναρτήσεις μέλη). Τα προγράμματα δεν χρειάζεται να ξέρουν πως λειτουργούν οι μέθοδοι. Με άλλα λόγια, το πρόγραμμα θα πρέπει να αντιμετωπίζει την τάξη σαν ένα «μαύρο κουτί». Πρέπει να ξέρει ποιες μεθόδους μπορεί να καλεί και ποιες παραμέτρους πρέπει να μεταβιβάζει σ αυτές τις μεθόδους, αλλά δε χρειάζεται να ξέρει τη συγκεκριμένη επεξεργασία που γίνεται μέσα στην τάξη (στο μαύρο κουτί). Απόκρυψη πληροφοριών (information hiding) είναι η διαδικασία με την οποία κάνετε διαθέσιμες στο πρόγραμμα μόνο τις ελάχιστες πληροφορίες μιας τάξης, τις οποίες χρειάζεται το πρόγραμμα για να χρησιμοποιήσει την τάξη. Τα ιδιωτικά και τα δημόσια μέλη των τάξεων της C++ σαν βοηθούν να κάνετε απόκρυψη πληροφοριών μέσα στα προγράμματά σας. Η τάξη που δημιουργήσατε πριν χρησιμοποιούσε την ετικέτα public, για να κάνει όλα τα μέλη της τάξης δημόσια, δηλαδή ορατά σε ολόκληρο το πρόγραμμα. Έτσι, το πρόγραμμα μπορούσε να έχει άμεση πρόσβαση σε οποιοδήποτε μέλος, με τον τελεστή τελείας. Εικόνα 2 Όταν δημιουργείτε τις τάξεις σας, μπορεί να έχετε μέλη που τις τιμές τους τις χρησιμοποιεί εσωτερικά η τάξη για να κάνει την επεξεργασία της, αλλά το ίδιο το πρόγραμμα δε χρειάζεται να τις προσπελάζει. Τα μέλη αυτού του είδους είναι ιδιωτικά μέλη, και πρέπει να κρύβονται από το πρόγραμμα. Εξ ορισμού, αν δεν χρησιμοποιήσετε την ετικέτα public (δημόσια), η C++ θεωρεί όλα τα μέλη των 6

τάξεων private (ιδιωτικά). Τα προγράμματα δεν μπορούν να προσπελάζουν ιδιωτικά μέλη τάξεων με τον τελεστή τελείας. Τα ιδιωτικά μέλη μπορούν να προσπελάζονται μόνο με τις μεθόδους της τάξης. Αν το πρόγραμμα σας επιχειρήσει να τα προσπελάσει με τον τελεστή τελείας, ο μεταγλωττιστής θα εμφανίσει μήνυμα συντακτικού λάθους. Πρέπει να προστατεύεται τα μέλη δεδομένων μιας τάξης από την άμεση προσπέλαση τους κάνοντας τα ιδιωτικά. Έτσι το πρόγραμμα δε θα μπορεί άμεσα να δίνει τιμές, αλλά θα πρέπει να καλεί μία μέθοδο της τάξης για να αποδώσει τιμές. Τέλος όταν δημιουργείτε προγράμματα που χειρίζονται μέλη τάξεων, μπορείτε να τοποθετείτε μπροστά στο κάθε όνομα μέλους το όνομα τάξης του και τον τελεστή διάκρισης εμβέλειας (::), όπως employee::name, για να αποφύγετε πιθανές συγκρούσης. Εικόνα 3 Επόμενη Σελίδα => 7

Κεφάλαιο 1 Ερωτηματολόγιο 1. Ερωτήσεις σωστού - λάθους Επιλέξτε Σωστό ή Λάθος και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε το σωστό! Ποιες από τις παρακάτω δηλώσεις τάξεων είναι ορθές Σωστό Λάθος ΑΠΑΝΤΗΣΗ Σωστό Λάθος ΑΠΑΝΤΗΣΗ 8

2. Ερωτήσεις ανάπτυξης Γράψτε μία λύση και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε μία από τις πιθανές απαντήσεις! α. Δηλώστε μια τάξη με όνομα book και δύο private μέλη ως εξής: title ως κείμενο, pages ως ακέραιος. ΑΠΑΝΤΗΣΗ b. Στην προηγούμενη δήλωση προσθέστε ένα public μέλος ως εξής: Μια συνάρτηση με όνομα setbook με δύο παραμέτρους ένα τύπου string και ένα τύπου int, η οποία θα εκχωρεί τις τιμές των παραμέτρων της στις ιδιότητες name και pages αντίστοιχα. ΑΠΑΝΤΗΣΗ Επόμενη Σελίδα => 9

ΑΠΑΝΤΗΣΗ 1a Η Σωστή απάντηση είναι: "Λάθος" γιατί πρέπει να αντικατασταθούν οι παρενθέσεις "()" στην αρχή και στο τέλος της class με άγκιστρα "{}". ΑΠΑΝΤΗΣΗ 1b Η Σωστή απάντηση είναι: "Σωστό" γιατί όταν δεν υπάρχουν οι ετικέτες private και public, ισχύει εξ ορισμού το private. 10

ΑΠΑΝΤΗΣΗ 2a Προτεινόμενη Σωστή απάντηση είναι: ΑΠΑΝΤΗΣΗ 2b Προτεινόμενη Σωστή απάντηση είναι: 11

Κεφάλαιο 2 Δομητές / Αποδομητές Δομητής Ο δομητής είναι μία μέθοδος η οποία είναι απαραίτητη σε κάθε τάξη και καλείται κάθε φορά που διακηρύσσεται ένα αντικείμενο της τάξης.εφόσον κανένας δομητής δεν έχει δηλωθεί από τον χρήστη τότε ο μεταγλωττιστής δημιουργεί μόνος του ένα δομητή του οποίου η υλοποίηση είναι η απλούστερη δυνατή. Κάθε δομητής έχει τα εξής χαρακτηριστικά: Το όνομά του πρέπει να είναι ίδιο με το όνομα της τάξης. Δεν επιτρέπεται να έχει τύπο (παρά το γεγονός ότι ουσιαστικά είναι μία μέθοδος) Μία τάξη μπορεί να έχει περισσότερους από ένα δομητές. Όλοι έχουν το ίδιο όνομα και δεν έχουν τύπο. Το χαρακτηριστικό που τους διαφοροποιεί είναι η λίστα ορισμάτων. Δεν επιτρέπεται δύο δομητές να έχουν ακριβώς την ίδια λίστα ορισμάτων. Πρέπει να έχουν τουλάχιστον μία διαφορά, είτε στον αριθμό των ορισμάτων είτε στον τύπο ενός τουλάχιστον ορίσματος. Ο δομητής με κενή λίστα ορισμάτων ονομάζεται προκαθορισμένος δομητής. Ένας προκαθορισμένος δομητής όταν δημιουργείται από το μεταγλωττιστή δεν έχει καμία γραμμή εντολών, αλλά όταν δημιουργηθεί από τον προγραμματιστή μπορεί να περιλαμβάνει κώδικα όπως και κάθε άλλος δομητής. Κάθε φορά που διακηρύσσεται ένα αντικείμενο μιας τάξης με περισσότερους από ένα δομητές, καλείται ο δομητής του οποίου η λίστα ορισμάτων ταιριάζει με τη λίστα της κλήσης του δομητή. Ένας δομητής δε μπορεί να κληθεί με άλλο τρόπο παρά μόνο κατά τη διακήρυξη ενός αντικειμένου. Αποδομητής Όπως ο δομητής έτσι και ο αποδομητής είναι μια μέθοδος της τάξης η οποία δεν έχει τύπο και είναι υποχρεωτικό να υπάρχει σε κάθε τάξη. Η λειτουργία του είναι να απελευθερώσει τη μνήμη που έχει δεσμευθεί για το αντικείμενο. Ο αποδομητής Καλείται αυτόματα κάθε φορά που κατά την εκτέλεση του προγράμματος κάποιο αντικείμενο τεθεί εκτός εμβελείας. Εφόσον δεν ορίζεται αποδομητής από τον προγραμματιστή τότε υλοποιείται αυτόματα. Ο αποδομητής μιας τάξης δεν επιτρέπεται να έχει ορίσματα, είναι μόνο ένας και δεν μπορεί να κληθεί από το αντικείμενο. Το όνομα του αποδομητή είναι το σύμβολο (~) ακολουθούμενο από το όνομα της τάξης (χωρίς κενά). Στις περιπτώσεις όπου έχουμε δυναμική δέσμευση μνήμης στη διακήρυξη κάποιων αντικειμένων τότε ο αποδομητής θα είναι υπεύθυνος για την απελευθέρωση της δυναμικά δεσμευμένης μνήμης. Στις περιπτώσεις αυτές πρέπει να χρησιμοποιηθεί κατάλληλος κώδικας στον αποδομητή. 12

Όταν θα εκτελεστεί η εντολή στην γραμμή 11 καταρχήν θα κληθεί ο προεπιλεγμένος δομητής και θα δημιουργηθεί το αντικείμενο a και στην συνέχεια θα κληθεί ο δομητής της γραμμής 7 και θα δημιουργηθεί το αντικείμενο b. Αν αλλάξουμε την δήλωση του δεύτερου δομητή και δώσουμε ερήμην τιμές στα ορίσματά του 7: money (int e=0, int c=0); Τότε κατά την εκτέλεση της εντολής στην γραμμή 11 θα δημιουργηθεί ένα σφάλμα μεταγλώττισης διότι το σύστημα αδυνατεί κατά την δημιουργία του αντικειμένου a να επιλέξει έναν από τους δύο δομητές οι οποίοι στην περίπτωση του a συμπίπτουν. Συνεπώς πρέπει ένας από τους δύο δομητές να παραληφθεί, είναι εύλογο να παραληφθεί ο προεπιλεγμένος. Πρέπει να σημειωθεί ότι το πρόβλημα εμφανίζεται μόνο όταν γίνεται προσπάθεια να δημιουργηθούν αντικείμενα δίχως αρχικές τιμές όπως το a. Επόμενη Σελίδα => 13

Κεφάλαιο 2 Ερωτηματολόγιο 1. Ερωτήσεις πολλαπλών επιλογών Επιλέξτε Σωστό ή Λάθος και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε το σωστό! a. Είναι σωστή η παρακάτω δήλωση των δομητών; Σωστό Λάθος ΑΠΑΝΤΗΣΗ b. Πόσα ορίσματα δέχεται ο συγκεκριμένος δομητής για το αντικείμενο που δημιουργήσαμε; Κανένα Ένα (1) Δύο (2) ΑΠΑΝΤΗΣΗ 14

2. Ερωτήσεις ανάπτυξης Γράψτε μία λύση και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε μία από τις πιθανές απαντήσεις! a. Δηλώστε ένα δομητή με όνομα point χωρίς ορίσματα. Όταν καλείται στην main ο δομητής αυτός (επίσης χωρίς ορίσματα), θα δίνει στο x και στο y την τιμή "0". ΑΠΑΝΤΗΣΗ b. Με βάση τις προηγούμενες ασκήσεις φτιάξτε μία main(), στην οποία θα δημιουργούνται δύο αντικείμενα, ένα για τον κάθε δομητή και τυπώστε τα. ΑΠΑΝΤΗΣΗ Επόμενη Σελίδα => 15

ΑΠΑΝΤΗΣΗ 1a Η Σωστή απάντηση είναι: "Λάθος" γιατί όλοι οι δομητές και ο αποδομητής πρέπει να έχουν το ίδιο όνομα με την τάξη. ΑΠΑΝΤΗΣΗ 1b Η Σωστή απάντηση είναι: "Δύο (2)" γιατί τα ορίσματα που δηλώσαμε για τον δομητή ειναι δύο. Το a και το b. 16

ΑΠΑΝΤΗΣΗ 2a Προτεινόμενη Σωστή απάντηση είναι: ΑΠΑΝΤΗΣΗ 2b Προτεινόμενη Σωστή απάντηση είναι: 17

Κεφάλαιο 3 Κληρονομικότητα Ο ρόλος της κληρονομικότητας Ένας στόχος του αντικειμενοστραφούς προγραμματισμού είναι η επαναχρησιμοποίηση μιας τάξης, που δημιουργήσατε για ένα πρόγραμμα, μέσα σε άλλα προγράμματα, πράγμα που σας παρέχει σημαντική οικονομία χρόνου και προγραμματιστικής εργασίας. Καθώς ορίζεται τις τάξεις σας, μπορεί να υπάρξουν περιπτώσεις που μία νέα τάξη χρησιμοποιεί πολλά ή και όλα τα χαρακτηριστικά μιας προϋπάρχουσας, και μετά προσθέτει ένα ή περισσότερα μέλη, είτε δεδομένα είτε συναρτήσεις. Σε τέτοιες περιπτώσεις, η C++ σας επιτρέπει να κατασκευάζεται ένα νέο αντικείμενο χρησιμοποιώντας τα χαρακτηριστικά ενός προϋπάρχοντος. Με άλλα λόγια, το νέο αντικείμενο κληρονομεί τα μέλη της υπάρχουσας τάξης, που ονομάζεται βασική τάξη (base class). Όταν κατασκευάζεται μία νέα τάξη από μία προϋπάρχουσα, η νέα τάξη ονομάζεται συχνά παράγωγη τάξη (derived class). Κληρονομικότητα (inheritance)είναι η δυνατότητα μίας παράγωγης τάξης να κληρονομεί τα χαρακτηριστικά μίας υπάρχουσας βασικής τάξης. Με απλά λόγια, αυτό σημαίνει ότι, αν έχετε μία τάξη που θέλετε τα μέλη της -δεδομένα ή συναρτήσεις- να μπορούν να χρησιμοποιούνται από μια νέα τάξη, μπορείτε να κατασκευάσετε τη νέα τάξη με βάση την προϋπάρχουσα (βασική) τάξη. Η νέα τάξη κληρονομεί τα μέλη (τα χαρακτηριστικά) της προϋπάρχουσας τάξης. Η χρήση της κληρονομικότητας για την κατασκευή νέων τάξεων σας εξοικονομεί σημαντικό χρόνο και κόπο προγραμματισμού. 18

Στη συνέχεια, υποθέστε ότι το πρόγραμμά σας χρειάζεται μία τάξη manager από την βασική τάξη employee. Στην αρχή του ορισμού της τάξης, χρησιμοποιείται η λέξη κλειδί class, το όνομα της τάξης manager ακολουθούμενο από άνω-κάτω τελεία, και το όνομα της βασικής τάξης employee. Η λέξη κλειδί public, μπροστά από το όνομα της βασικής τάξης employee, καθορίζει ότι τα δημόσια μέλη της τάξης employee είναι επίσης δημόσια μέλη στην τάξη manager. Σημείωση: Όταν παράγεται μία τάξη από μία βασική τάξη, τα ιδιωτικά (private) μέλη της βασικής τάξης είναι προσπελάσιμα από την παράγωγη τάξη μόνο μέσω των συναρτήσεων διασύνδεσης (interface functions). Επομένως, η παράγωγη τάξη δεν μπορεί να προσπελάσει άμεσα ένα ιδιωτικό μέλος της βασικής με τον τελεστή τελείας. Αντίθετα στα ιδιωτικά μέλη μπορούν να έχουν πρόσβαση μόνον οι μέθοδοι της τάξης. Κατά κανόνα, πρέπει να προστατεύετε τα περισσότερα μέλη δεδομένων των τάξεων σας, κάνοντάς τα ιδιωτικά. 19

Προστατευμένα Μέλη Εξετάζοντας ορισμούς βασικών τάξεων, μπορεί να συναντήσετε δημόσια (public), ιδιωτικά (private) και προστατευμένα (protected) μέλη. Όπως μάθατε, τα δημόσια μέλη μιας βασικής τάξης μπορούν να προσπελάζονται από την παράγωγη τάξη, σαν να είχαν οριστεί μέσα σε αυτή. Αντίθετα, τα ιδιωτικά μέλη της βασικής τάξης δεν μπορούν να προσπελαστούν άμεσα από την παράγωγη τάξη. Η παράγωγη τάξη πρέπει να χρησιμοποιεί μία συνάρτηση διασύνδεσης για να προσπελάσει τα μέλη της βασικής τάξης. Ένα προστατευμένο (protected) μέλος μιας βασικής τάξης είναι κάτι μεταξύ ιδιωτικού και δημόσιου μέλους. Αν ένα μέλος είναι προστατευμένο, τα αντικείμενα των παραγώγων τάξεων μπορούν να το προσπελάζουν σαν να ήταν δημόσιο. Σε όλο το υπόλοιπο πρόγραμμα, τα προστατευμένα μέλη φαίνονται σαν ιδιωτικά. Ο μόνος τρόπος που μπορεί το πρόγραμμα να προσπελάζει προστατευμένα μέλη είναι με συναρτήσεις διασύνδεσης. Ο παρακάτω ορισμός της τάξης book χρησιμοποιεί την ετικέτα protected για να επιτρέψει στις τάξεις που παράγονται από την τάξη book να προσπελάζουν με άμεσο τρόπο τα μέλη title, author και pages, χρησιμοποιώντας τον τελεστή τελείας. Επόμενη Σελίδα => 20

Κεφάλαιο 3 Υπέρβαση & Απόκρυψη Συναρτήσεων Η c++ επιτρέπει στα προγράμματα σας να χρησιμοποιούν υπέρβαση (overloading) στους ορισμούς των συναρτήσεων, ορίζοντας εναλλακτικές συναρτήσεις για διαφορετικούς τύπους παραμέτρων. Η υπέρβαση χρησιμοποιείτε και στις συναρτήσεις εγκατάστασης. Η τάξη base έχει την μέθοδο print η οποία είναι υπερφορτωμένη, υπάρχει η έκδοση print( ) χωρίς όρισμα και η print(int) με όρισμα ένα ακέραιο. Η παράγωγη τάξη derived1 έχει επίσης μια μέθοδο print(). Το ερώτημα που τίθεται είναι το εξής: Αν διακηρύξουμε ένα αντικείμενο της τάξης derived και καλέσουμε μέσου αυτού την μέθοδο print() ποια έκδοση της print θα χρησιμοποιηθεί; Η απάντηση είναι η έκδοση της print που δηλώθηκε μέσα στην derived. Η τεχνική αυτή ονομάζεται υπέρβαση, δηλαδή η derived::print( ) υπερβαίνει την base::print ( ). Το επόμενο ερώτημα που τίθεται είναι τι θα συμβεί αν μέσω ενός αντικειμένου της derived κληθεί η μέθοδος βάσης print(int); Η απάντηση είναι ότι και πάλι δεν χρησιμοποιηθεί η έκδοση base::print(int) αλλά η derived::print( ), η τεχνική αυτή ονομάζεται απόκρυψη, δηλαδή μια μέθοδος της παράγωγης τάξης αποκρύπτει όλες τις συνώνυμες μεθόδους της βάσης. Ένα αντικείμενο της derivate μπορεί βέβαια να χρησιμοποιήσει μια μέθοδο της βάσης αρκεί να προσδιοριστεί πλήρως το όνομα της μεθόδου π.χ object.base::print() 21

Σύμφωνα με τo παραπάνω πρόγραμμα αυτά που θα τυπωθούν είναι: Επόμενη Σελίδα => 22

Κεφάλαιο 3 Ερωτηματολόγιο 1. Ερωτήσεις ανάπτυξης Γράψτε μία λύση και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε μία από τις πιθανές απαντήσεις! a. Με βάση το προηγούμενο σχήμα φτιάξτε μία main(), στην οποία θα δημιουργούνται: Ένα αντικείμενο χωρίς ορίσματα και ένα αντικείμενο με όρισμα (title) για την τάξη book, και επίσης ένα αντικείμενο χωρίς ορίσματα και ένα 23

αντικείμενο με ορίσματα (Title / pages) για την τάξη comics. Στο τέλος τυπώστε τα όλα. ΑΠΑΝΤΗΣΗ b. Με βάση το προηγούμενο σχήμα και την main που δημιουργήσατε, αν προστεθεί η παρακάτω γραμμή τι θα τυπωθεί στο τέλος; a) Τίποτα b) "No title" c) "Ο Ναυαγός" ΑΠΑΝΤΗΣΗ c. Γράψτε τις κεφαλίδες των τάξεων first, second και third, ώστε να υλοποιηθεί το σχήμα κληρονομικότητας, σε κάθε μια από τις επόμενες περιπτώσεις: 24

1 ΑΠΑΝΤΗΣΗ 2 ΑΠΑΝΤΗΣΗ 25

3 ΑΠΑΝΤΗΣΗ Επόμενη Σελίδα => 26

ΑΠΑΝΤΗΣΗ a Προτεινόμενη Σωστή απάντηση είναι: ΑΠΑΝΤΗΣΗ b Η Σωστή απάντηση είναι: b) "No Title" γιατί στο biblio3 δεν είχε ορίστει κανένας τίτλος και το είχε μείνει κενό. 27

ΑΠΑΝΤΗΣΗ c1 Προτεινόμενη Σωστή απάντηση είναι: ΑΠΑΝΤΗΣΗ c2 Προτεινόμενη Σωστή απάντηση είναι: 28

ΑΠΑΝΤΗΣΗ c3 Προτεινόμενη Σωστή απάντηση είναι: 29

Κεφάλαιο 4 Πολυμορφισμός Στο κεφάλαιο 4 θα μιλήσουμε για την έννοια του πολυμορφισμού.ας υποθέσουμε ότι Μας δίνεται η δυνατότητα να δηλώσουμε έναν δείκτη προς αντικείμενο της τάξης vehicle και όπως αναμένει κάποιος μέσω του δείκτη μπορούμε να δεσμεύσουμε δυναμικά μνήμη για ένα αντικείμενο της τάξης vehicle, όπως φαίνεται στον κώδικα που ακολουθεί: 30

Όπως βλέπουμε στο παραπάνω σχήμα φτιάξαμε μία τάξη vehicle στην οποία δηλώσαμε 2 ορίσματα.επίσης κάναμε έναν αποδομητή, ένα δομητή (αν δεν κάνουμε καταχώρηση βάζει μόνο του τιμές) και τρεις μεθόδους όπου δύο παίρνουν στοιχεία και η μία τα τυπώνει. Τέλος υπάρχει και μία main όπου δηλώνουμε ένα δείκτη προς αντικείμενο *obj. Παρατηρούμε ότι μέσω του δείκτη obj μπορούμε να προσπελάσουμε τις μεθόδους της τάξης vehicle. Έστω ότι δηλώνεται μια παράγωγη τάξη π.χ η τάξη car, η οποία κληρονομεί την vehicle, τότε η C++ μας επιτρέπει να κάνουμε και το εξής να δηλώσουμε έναν δείκτη προς αντικείμενο της βάσης, στην περίπτωση μας προς την vehicle, αλλά μέσω αυτού να δεσμεύσουμε μνήμη για ένα αντικείμενο της παράγωγης τάξης, στην περίπτωση μας την car. 31

32

H τεχνική αυτή ονομάζεται πολυμορφισμός, κατά μια πρώτη ματιά μοιάζει να υπάρχει αντίφαση, αφού ο δείκτης δείχνει προς αντικείμενο της τάξης vehicle και το αντικείμενο που δημιουργείται μέσω αυτού ανήκει στην τάξη car, αλλά μην ξεχνάμε ότι η car απορρέει από την vehicle, ένα car δηλαδή είναι και vehicle. Ωστόσο αν παρατηρήσουμε τον κώδικα στην τελευταία main, θα διαπιστώσουμε ότι μέσω του δείκτη προσπελαύνουμε μόνο συναρτήσεις της βάσης, δηλαδή της vehicle, τίθεται λοιπόν το πρόβλημα μπορούμε να προσπελάσουμε μέσω του δείκτη obj και μεθόδους της τάξης car, δεδομένου ότι μέσω του δείκτη obj δημιουργήσαμε ένα αντικείμενο της τάξης car; Η απάντηση είναι όχι, τουλάχιστον έτσι όπως έχουν δηλωθεί οι τάξεις. Επόμενη Σελίδα => 33

Κεφάλαιο 4 Ιδεατές (virtual) Συναρτήσεις Την λύση στο πρόβλημα που παρουσιάστηκε στο προηγούμενο σχήμα με βάση τον πολυμορφισμό την δίνουν οι ιδεατές (virtual) συναρτήσεις. Αυτές λειτουργούν ως εξής: Αν στην τάξη βάσης και στην παράγωγη τάξη υπάρχουν όμοιες συναρτήσεις, όπως η printvehicle στο παράδειγμά μας, τότε εάν εφαρμοστεί η τεχνική που περιγράφηκε προηγουμένως, και προστεθεί η δήλωση virtual στην δήλωση της συνάρτησης print vehicle της τάξης vehicle τότε για αντικείμενα της τάξης car που δημιουργούνται μέσω δεικτών της τάξης vehicle θα χρησιμοποιείται η έκδοση της printvehicle της car και όχι της βάσης, δημιουργείται δηλαδή ένα ιδεατό κανάλι που συνδέει τις δυο συναρτήσεις. Ο κώδικας τώρα έχει ως εξής: 34

35

Είναι προφανές ότι αν μέσω ενός δείκτη προς την βάση δημιουργηθεί ένα αντικείμενο της βάσης τότε σε κάθε ιδεατή συνάρτηση θα χρησιμοποιηθεί η έκδοση της βάσης, και όχι έκδοση της παράγωγης. Δες τον κώδικα που ακολουθεί : Στην εντολή (1) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της vehicle, ενώ στην εντολή (2) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της car. Τέλος, από όλα τα παραπάνω συνάγεται ότι μόνο όσες συναρτήσεις της παράγουσας τάξης έχουν μια όμοια ιδεατή συνάρτηση στην τάξη βάσης μπορούν να προσπελαστούν με ένα δείκτη προς την τάξη βάσης. Στον κώδικα που ακολουθεί η εντολή (1) είναι λανθασμένη. Επόμενη Σελίδα => 36

Κεφάλαιο 4 Ερωτηματολόγιο 1. Ερωτήσεις ανάπτυξης Γράψτε μία λύση και πατήστε "ΑΠΑΝΤΗΣΗ" για να δείτε μία από τις πιθανές απαντήσεις! (Δείτε στην επόμενη σελίδα το σχήμα) => 37

38

Σχήμα 1 a. Με βάση το προηγούμενο σχήμα, γιατί στην main, εκεί που δείχνουν τα βελάκια, στην εντολή (1) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της vehicle, ενώ στην εντολή (2) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της car; ΑΠΑΝΤΗΣΗ b. Με βάση το σχήμα της ερώτησης 1 (Σχήμα 1), γιατί; στην παρακάτω main (Σχήμα 2) η εντολή 1 είναι λανθασμένη; Σχήμα 2 ΑΠΑΝΤΗΣΗ c. Γράψτε μία καινούργια τάξη bicycle η οποία θα κληρονομεί όλα τα στοιχεία της τάξης vehicle με βάση το σχήμα 1. Η τάξη bicycle θα έχει τα στοιχεία Κυβικά εκατοστά (cc) και Τελική Ταχύτητα (topspeed). 39

ΑΠΑΝΤΗΣΗ d. Γράψτε τώρα μία καινούργια main με βάση το σχήμα 1 και με βάση την τάξη bicycle που δημιουργήσατε πριν.σε αυτήν την main, δημιουργήστε: ένα δείκτη για αντικείμενο της τάξης vehicle και τυπώστε το, ένα δείκτη για αντικείμενο της τάξης car και τυπώστε το και τέλος ένα δείκτη για αντικείμενο της τάξης bicycle και τυπώστε το. ΑΠΑΝΤΗΣΗ Αρχική Σελίδα => 40

ΑΠΑΝΤΗΣΗ a Προτεινόμενη Σωστή Aπάντηση είναι: Η ΑΠΆΝΤΗΣΗ είναι ότι στην εντολή (1) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της vehicle γιατί το αντικείμενο που δημιουργήθηκε (*obj1) ήταν αντικείμενο της τάξης vehicle οπότε και στην εντολή (2) θα χρησιμοποιηθεί η έκδοση της printvehicle( ) της car γιατί το αντικείμενο που δημιουργήθηκε (*obj2) ήταν αντικείμενο της τάξης car. ΑΠΑΝΤΗΣΗ b Προτεινόμενη Σωστή Aπάντηση είναι: 41

Η ΑΠΑΝΤΗΣΗ είναι ότι στην παραπάνω main η εντολή 1 είναι λάθος γιατί δεν μπορούμε να προσπελάσουμε κάποιο μέλος της τάξης car ή να το αλλάξουμε, γιατί η τάξη car δεν έχει δηλωθεί ως virtual. ΑΠΑΝΤΗΣΗ c Προτεινόμενη Σωστή Aπάντηση είναι: 42

ΑΠΑΝΤΗΣΗ d Προτεινόμενη Σωστή Aπάντηση είναι: 43

ΒΙΒΛΙΟΓΡΑΦΙΑ Εγχειρίδιο της C++ (Liberty Jesse, Κουτρούμπα Χρυσούλα ) Εισαγωγή στη C++ (Jamsa Kris) Η γλώσσα προγραμματισμού C++ (Stroustroup Bjarne) C++ αντικειμενοστρεφής προγραμματισμός υπολογιστών (Τομαράς Αλέξανδρος) C++ προγραμματισμός (Κυτάγιας, Δημ. Χ.) Advanced C++ Programming Styles and Idioms (Addison - Wesley, 1992) The Annotated C++ Reference Manual (Addison -Wesley, 1990) Γλώσσα Ελληνική Ελληνική Ελληνική Ελληνική Ελληνική Αγγλική Αγγλική C++ Primer Αγγλική (Addison - Wesley, 1991) ------------------------------------------------------------------------------------------------------- ΠΗΓΕΣ ΔΙΑΔΙΚΤΥΟΥ http://dide.flo.sch.gr/plinet/tutorials/tutorials-c++.html http://www.parashift.com/c++-faq-lite/ http://www.cplusplus.com/doc/tutorial/ http://www.libertyassociates.com/pages/books.htm http://www.cpluscplus.com Ελληνική Αγγλική Αγγλική Αγγλική Αγγλική 44

ΤΕΛΟΣ 45