Προγραμματισμός ΙΙ Ενότητα 5:

Σχετικά έγγραφα
Προγραμματισμός ΙΙ Ενότητα 5:

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 8: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 4:

Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Προαπαιτούμενα. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 4: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 6: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 3:

Προγραμματισμός ΙΙ. Ενότητα 8: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Επανάληψη στον Προγραμματισμό Ι. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 6:

Προγραμματισμός ΙΙ. Ενότητα 10: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

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

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

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

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

Προγραμματισμός ΙΙ. Ενότητα 3: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

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

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

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

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

Δομές Δεδομένων Ενότητα 1

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

Δομές Δεδομένων. Ενότητα 2: Περισσότερα για τους δείκτες. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

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

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

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

Βάσεις Δεδομένων. Ενότητα 1: Εισαγωγή στις Βάσεις δεδομένων. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

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

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 1: Εκτιμητές και Ιδιότητες. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

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

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

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

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

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

Συστήματα Αναμονής. Ενότητα 3: Στοχαστικές Ανελίξεις. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

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

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

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Οικονομετρία Ι. Ενότητα 3: Θεώρημα των Gauss Markov. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

Οργάνωση και Διοίκηση Πωλήσεων Ενότητα 1: Ο ΡΟΛΟΣ ΤΩΝ ΠΩΛΗΣΕΩΝ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΣΤΡΑΤΗΓΙΚΗΣ ΜΑΡΚΕΤΙΝΓΚ

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

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

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

Οικονομετρία Ι. Ενότητα 10: Διαγνωστικοί Έλεγχοι. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

Μηχανολογικό Σχέδιο Ι

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Συστήματα Αναμονής. Ενότητα 7: Ουρά Μ/Μ/1. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Τεχνολογία Πολυμέσων. Ενότητα 8: Pool Table. Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Λογιστική Κόστους Ενότητα 10: Ασκήσεις Προτύπου Κόστους Αποκλίσεων.

ΑΝΤΙΡΡΥΠΑΝΤΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΑΙΩΡΟΥΜΕΝΩΝ ΣΩΜΑΤΙΔΙΩΝ Ενότητα 2: Αιωρούμενα σωματίδια & Απόδοση συλλογής Αν. Καθ. Δρ Μαρία Α. Γούλα Τμήμα Μηχανικών

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

Οικονομετρία Ι. Ενότητα 5: Ανάλυση της Διακύμανσης. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

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

Συστήματα Αναμονής. Ενότητα 5: Ανέλιξη Poisson. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Οικονομετρία Ι. Ενότητα 6: Πολλαπλό Γραμμικό Υπόδειγμα Παλινδρόμησης. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

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

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

Στατιστική Ι. Ενότητα 3: Στατιστική Ι (3/4) Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Κοζάνη)

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών

Transcript:

Προγραμματισμός ΙΙ Ενότητα 5: Εισαγωγή στις κλάσεις, στα μέλη δεδομένων και στις μεθόδους - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

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

Εισαγωγή στις κλάσεις, στα μέλη δεδομένων και στις μεθόδους - Μέρος 1

Σκοποί ενότητας Σκοπός της ενότητας είναι η εισαγωγή στις κλάσεις, στα μέλη δεδομένων και στις μεθόδους. 5

Περιεχόμενα ενότητας Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης. Κατασκευαστές. Καταστροφέας. Βιβλιογραφία. 6

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (1/4) class CDate { private: int int int }; public: void void Day; Month; Year; Read(); Write(); 7

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (2/4) Στο παράδειγμα αυτό έχουμε τη δήλωση μιας κλάσης (με τη λέξη class) με όνομα CDate, για την έννοια της ημερομηνίας. Μέσα σε άγκιστρα έχουμε τα περιεχόμενα της κλάσης, ομαδοποιημένα σε δύο ενότητες. Η πρώτη ενότητα περιέχει τις ιδιότητες/μέλη δεδομένων που περιγράφουν την έννοιά μας, δηλαδή την ημέρα, το μήνα και το έτος μιας ημερομηνίας. 8

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (3/4) Η δεύτερη ενότητα περιέχει δύο μεθόδους (ή συναρτήσεις) που υποτίθεται ότι διαβάζουν και εμφανίζουν μια ημερομηνία (όταν υλοποιηθούν αργότερα). Η σειρά των ενοτήτων δεν παίζει ρόλο. Μπορείτε ακόμη και να δηλώσετε τα μέλη και τις μεθόδους εναλλάξ. 9

Η βασική σύνταξη και τα περιεχόμενα μιας κλάσης (4/4) Λίγο αργότερα θα εξηγήσουμε τα προσδιοριστικά private και public. Το ελληνικό ερωτηματικό στο τέλος της κλάσης είναι υποχρεωτικό, και η έλλειψή του αποτελεί συντακτικό σφάλμα. 10

Κατασκευαστές (1/27) Μία κλάση μπορεί να έχει από 0 ως Ν κατασκευαστές. Συνηθίζεται να υπάρχει μία από τον 1ο (όχι πάντοτε), μία τον 3ο τύπο, και μερικές από το 2ο. Ας εξετάσουμε ένα λεπτομερές παράδειγμα. Υποθέτουμε ότι υλοποιούμε ένα σχεδιαστικό πρόγραμμα που δουλεύει με δισδιάστατα (2Δ) γραφικά. 11

Κατασκευαστές (2/27) Θα χρειαστούμε μια κλάση για την έννοια του σημείου (point). Η παρακάτω περιγραφή ξεκινάει από τα βασικά, και θα περιγράψει πλήρως μια κλάση. Στο τέλος θα δούμε την πλήρη κλάση και τη χρήση της σε ένα ενιαίο πρόγραμμα. 12

Κατασκευαστές (3/27) Στην αρχή του προγράμματος γράφουμε:. #include <iostream> using namespace std; Εδώ συμπεριλαμβάνουμε τη βιβλιοθήκη iostream, η οποία περιέχει ό,τι χρειαζόμαστε για είσοδο από το πληκτρολόγιο και έξοδο στην οθόνη. Θεωρήστε τη ως το αντίστοιχο της βιβλιοθήκης stdio της γλώσσας C. Στη 2η γραμμή δηλώνουμε τη χρήση του χώρου ονομάτων std. 13

Κατασκευαστές (4/27) Για την ώρα μπορείτε να γράφετε τις βιβλιοθήκες που χρειάζεστε χωρίς το.h στο τέλος, και κατόπιν τις λέξεις using namespace std. Θα μιλήσουμε αργότερα, σε μεταγενέστερη ενότητα, για τους χώρους ονομάτων. Ακολουθεί η δήλωση της κλάσης του σημείου, χωρίς μέλη δεδομένων ή μεθόδους (στη θέση τους έχει μπει σχόλιο της μίας γραμμής):. class Point { //... }; 14

Κατασκευαστές (5/27) Μια κλάση που δεν έχει μέλη δεδομένων και μεθόδους είναι κενή. Αυτό συντακτικά επιτρέπεται. Ας δούμε τη δήλωση των μελών δεδομένων. Επειδή πρόκειται για 2Δ σχεδιαστικό πρόγραμμα, τα σημεία θα έχουν δύο συνιστώσες (x και y). Το προσδιοριστικό πρόσβασης είναι το private. Αυτό θα το αναλύσουμε αργότερα. class Point { private: double x, y; 15

Κατασκευαστές (6/27) Εδώ έχουμε τα δύο μέλη δεδομένων, x και y, και έχουν βασικό τύπο double. Αυτό σημαίνει ότι τα στιγμιότυπα (ή μεταβλητές) αυτής της κλάσης θα έχουν δύο ιδιότητες. Ό,τι έπεται ενός προσδιοριστικού υπακούει στους κανόνες που επιβάλει το συγκεκριμένο προσδιοριστικό. Τα προσδιοριστικά θα εξηγηθούν μετά το τέλος της περιγραφής του ολοκληρωμένου προγράμματος. 16

Κατασκευαστές (7/27) Αν δε δηλώσουμε κάποιο προσδιοριστικό (private, public, ή protected), τότε εξ' ορισμού ισχύει το private. Στο παράδειγμά μας οι ιδιότητες γράφονται ομαδοποιημένες πριν από τις μεθόδους. Μπορεί να γίνει και το αντίθετο. Θα δείτε κάποια βιβλία που γράφουν πρώτα τις μεθόδους και μετά τις ιδιότητες. 17

Κατασκευαστές (8/27) Δεν είναι απαραίτητο οι ιδιότητες και οι μέθοδοι που υπόκεινται στους κανόνες ενός προσδιοριστικού να είναι ομαδοποιημένες. Μπορείτε να χρησιμοποιήσετε τα προσδιοριστικά όσες φορές θέλετε. Οι ιδιότητες συνήθως βρίσκονται κάτω από το προσδιοριστικό private. 18

Κατασκευαστές (9/27) Εδώ είναι καλό να αναφέρουμε το γενικό κανόνα ορατότητας για τα περιεχόμενα μιας κλάσης: Όλοι μέσα σε μία κλάση γνωρίζουν όλους, ανεξάρτητα με τη σειρά που έχουν δηλωθεί. Αυτό σημαίνει ότι μια μέθοδος μπορεί να χρησιμοποιεί μέλη ή και μεθόδους που δηλώνονται μετά από αυτή. 19

Κατασκευαστές (10/27) Παρακάτω δείχνουμε τον προεπιλεγμένο κατασκευαστή:. public: Point() : x(0.0), y(0.0) {} // Default constructor Σε αυτό το σημείο χρησιμοποιούμε το προσδιοριστικό public. Αυτό σημαίνει ότι όσα έπονται υπακούουν στους κανόνες του συγκεκριμένου προσδιοριστικού, μέχρι να χρησιμοποιηθεί κάποιο άλλο (ή ακόμη και το ίδιο). 20

Κατασκευαστές (11/27) Όπως έχουμε πει, οι κατασκευαστές έχουν πάντοτε το ίδιο όνομα με την κλάση. Έτσι ξεχωρίζουν ως κατασκευαστές. Ο συγκεκριμένος κατασκευαστής είναι ο προεπιλεγμένος, διότι δε δέχεται παραμέτρους. Η αρχικοποίηση και των δύο μελών δεδομένων της κλάσης γίνεται στη λίστα αρχικοποίησης (initialization list), δηλαδή στη γραμμή μετά την επικεφαλίδα της μεθόδου, και η οποία ξεκινάει από το «:». Εδώ το σώμα της μεθόδου (ό,τι υπάρχει ανάμεσα στο { και στο }) είναι κενό. 21

Κατασκευαστές (12/27) Στη λίστα αρχικοποίησης παραθέτουμε κάθε ένα μέλος δεδομένων με τη σειρά που δηλώθηκε, και μέσα σε παρένθεση την προεπιλεγμένη τιμή που θέλουμε να του δώσουμε. Τα μέλη χωρίζονται μεταξύ τους με κόμμα, και δεν υπάρχει ελληνικό ερωτηματικό στο τέλος της λίστας. Στο παραπάνω παράδειγμα και τα δύο μέλη δεδομένων παίρνουν την προεπιλεγμένη τιμή κινητής υποδιαστολής διπλής ακρίβειας 0.0 (δηλαδή τα x και y παίρνουν την τιμή 0). 22

Κατασκευαστές (13/27) Η αρχικοποίηση των μελών δεδομένων μπορεί να γίνει και μέσα στο σώμα της μεθόδου, όπως θα δούμε λίγο παρακάτω. Εκεί θα συζητήσουμε και τη διαφορά των δύο αρχικοποιήσεων, στη λίστα αρχικοποίησης και στο σώμα της αντίστοιχης μεθόδου. Ακολουθεί ένα παράδειγμα της 2ης κατηγορίας κατασκευαστών που περιγράψαμε πιο πάνω. 23

Κατασκευαστές (14/27) Εδώ ο πρώτος κατασκευαστής του 2ου τύπου δέχεται δύο ορίσματα ίδιου τύπου με τα μέλη δεδομένων, ενώ ο δεύτερος κατασκευαστής του 3ου τύπου δέχεται δύο ορίσματα διαφορετικού τύπου από τα μέλη δεδομένων. 24

Κατασκευαστές (15/27) Point(const double x_coord, const double y_coord) : x(x_coord), y(y_coord) {} // Constructor Point(const int x_coord, const int y_coord) // : x((double) x_coord), y((double) y_coord) { x = (double) x_coord; y = (double) y_coord; } // Constructor 25

Κατασκευαστές (16/27) Ο πρώτος από αυτούς τους δύο κατασκευαστές δίνει στα μέλη δεδομένων αρχικές τιμές που παρέχονται ως ορίσματα. Έτσι, το πρώτο όρισμα έχει όνομα x_coord, είναι του θεμελιώδους τύπου double, και η τιμή του αντιγράφεται στο μέλος δεδομένων x (αυτό γίνεται στη λίστα αρχικοποίησης). Το ακριβώς αντίστοιχο γίνεται και με το δεύτερο όρισμα. Το σώμα αυτής της μεθόδου παραμένει κενό (παρ' όλα αυτά πρέπει να υπάρχει, έστω και με κενά { και }. Η λέξη const θα εξηγηθεί μετά το πλήρες πρόγραμμα. 26

Κατασκευαστές (17/27) Ο δεύτερος από αυτούς τους κατασκευαστές δέχεται δύο, επίσης, παραμέτρους, αυτήν τη φορά τύπου int. Οι τιμές αυτών των παραμέτρων αντιγράφονται στα αντίστοιχα μέλη δεδομένων, μετά από τη μετατροπή τύπου (double). Εδώ έχουμε σε σχόλιο την αντίστοιχη λίστα αρχικοποίησης, ώστε να μπορέσετε να κάνετε τη σύγκριση. Για λόγους που ξεφεύγουν από το αντικείμενο της παρούσας ενότητας, προτιμήστε τη λίστα αρχικοποίησης, κι αν αυτό δεν επαρκεί, τότε χρησιμοποιήστε το σώμα του κατασκευαστή. 27

Κατασκευαστές (18/27) Φυσικά χρειάζεται μία από τις δύο προσεγγίσεις. Ο μεταγλωττιστής δεν έχει πρόβλημα με το 2ο παραπάνω κατασκευαστή που δέχεται δύο παραμέτρους, αφού και οι δύο είναι διαφορετικού τύπου. Δηλαδή λέγεται ότι ο κατασκευαστής είναι υπερφορτωμένος (overloaded). Το ίδιο ισχύει και μεταξύ του 1ου κατασκευαστή γενικού τύπου και του προεπιλεγμένου. Στο παράδειγμά μας θα δείτε τέσσερις (4) κατασκευαστές. 28

Κατασκευαστές (19/27) Στη C++ μπορείτε να έχετε παραπάνω από μία μεθόδους με το ίδιο όνομα. Αυτό λέγεται υπερφόρτωση. Ωστόσο, υπάρχουν κάποιοι κανόνες, αλλιώς ο μεταγλωττιστής δεν μπορεί να διακρίνει τη διαφορά. 29

Κατασκευαστές (20/27) Οι κανόνες αυτοί είναι: 1. Αν διαφέρει το πλήθος των παραμέτρων, δεν υπάρχει πρόβλημα. 2. Στην περίπτωση που δύο ή περισσότερες μέθοδοι έχουν το ίδιο πλήθος παραμέτρων, πρέπει να διαφέρουν: a. Στον τύπο. b. Στη σειρά τους. 3. Δεν παίζει ρόλο ο επιστρεφόμενος τύπος της μεθόδου σε σχέση με τα #1 και #2. 30

Κατασκευαστές (21/27) Ας δούμε το #2 λίγο περισσότερο. Αν 2 μέθοδοι έχουν 3 παραμέτρους η κάθε μία κι έστω και μία διαφέρει στον τύπο, τότε δεν υπάρχει πρόβλημα. Αν 2 μέθοδοι έχουν 2 παραμέτρους και η μία είναι τύπου int και η άλλη τύπου double, τότε δεν μπορούν να έχουν αυτούς τους τύπους με τη συγκεκριμένη σειρά. Αν η σειρά των τύπων που διαφέρουν δεν είναι η ίδια, τότε δεν έχουμε πρόβλημα. Συνοψίζοντας, πρέπει να προσέχουμε το πλήθος, τον τύπο, και τη σειρά των παραμέτρων, όχι το όνομα, τον επιστρεφόμενο τύπο ή ένα πιθανό const. 31

Κατασκευαστές (22/27) Οι παραπάνω κανόνες μπορούν να απλοποιηθούν με τη χρήση της παρακάτω τεχνικής: 1. Από όλες τις μεθόδους που έχουν το ίδιο όνομα αφαιρούμε τον επιστρεφόμενο τύπο. 2. Μετά αφαιρούμε τα const, τα &, αλλά ΟΧΙ τα * (αφού τα * υποδηλώνουν δείκτες, και συνεπώς άλλο τύπο παραμέτρου). 3. Αφαιρούμε τα ονόματα των παραμέτρων (όχι τους τύπους τους). 4. Αν στις μεθόδους που μείνουν υπάρχουν δύο ή περισσότερες που είναι ολόιδιες, τότε οι αντίστοιχες δηλώσεις δεν μπορούν να συνυπάρχουν ως έχουν. 32

Κατασκευαστές (23/27) Οι παραπάνω κανόνες και η τεχνική ισχύουν για την υπερφόρτωση οποιασδήποτε μεθόδου. Η επόμενη μέθοδος στο παράδειγμά μας είναι ο κατασκευαστής αντιγράφου (copy constructor). Σκοπός του είναι να παράγει κλώνο ενός άλλου στιγμιοτύπου. Δηλαδή το χρησιμοποιούμε όταν θέλουμε ένα στιγμιότυπο που μόλις δηλώσαμε να πάρει τις ίδιες ενός άλλου στιγμιοτύπου που δηλώθηκε νωρίτερα. 33

Κατασκευαστές (24/27) Point(const Point &pnt) { if ( this!= &pnt ) { x = pnt.x; y = pnt.y; } // if } // Copy constructor 34

Κατασκευαστές (25/27) Ο συγκεκριμένος κατασκευαστής δέχεται μία παράμετρο ίδιου τύπου με την κλάση. Πριν από τον τύπο της παραμέτρου υπάρχει η λέξη const που θα εξηγήσουμε αργότερα. Ακολουθεί ο τύπος της παραμέτρου, που εδώ είναι ίδιος με την κλάση. Ακολουθεί το σύμβολο &, το οποίο θα εξηγήσουμε στην επόμενη ενότητα, όταν θα μιλήσουμε περισσότερο για τις κλάσεις, και θα δούμε τις επιπτώσεις του. Μετά έρχεται το όνομα της παραμέτρου, δηλαδή το pnt. 35

Κατασκευαστές (26/27) Εδώ η παράμετρος μπορεί να γραφτεί πιο απλά, ως Point pnt. Αυτό θα δουλέψει σωστά, αλλά θα γίνει περιττή δουλειά κατά την κλήση του συγκεκριμένου κατασκευαστή. Μέσα στο σώμα του κατασκευαστή ξεκινούμε με μια εντολή if. Για την ώρα θα αναβάλλουμε τη συζήτηση της συγκεκριμένης διακλάδωσης μέχρι την επόμενη ενότητα. 36

Κατασκευαστές (27/27) Εδώ απλά θα αναφέρουμε ότι προσπαθούμε να αποτρέψουμε την αντιγραφή ενός στιγμιοτύπου στον εαυτό του. Μέσα στην if αντιγράφουμε ένα-ένα τα μέλη του στιγμιοτύπου της παραμέτρου στο στιγμιότυπο που χρησιμοποιεί τη μέθοδο. 37

Καταστροφέας (1/2) Ας δούμε, όμως, το παράδειγμα του καταστροφέα του αρχικού μας σεναρίου, ο οποίος είναι σκοπίμως ιδιαίτερα απλός χωρίς πρακτική αξία, και υπάρχει μόνο για εκπαιδευτικούς λόγους. 38

Καταστροφέας (2/2) ~Point() { x = y = 0.0; } // Destructor Του ονόματος του καταστροφέα προηγείται το ~. Στο σώμα του καταστροφέα μηδενίζουμε (εδώ αυθαίρετα) τα δύο μέλη δεδομένων. 39

Βιβλιογραφία (1/10) 1. Alexandrescu A. (2001) Modern C++ design: generic programming and design patterns applied. USA, Addison-Wesley Publishing Company. 323 pp. ISBN-13 978-0-201-70431-0. ( 22.85, 27,42). 2. Bennett S, McRobb S and R Farmer. (2002) Object-oriented systems analysis and design using UML. 2nd Edition. McGraw- Hill Education. ISBN 0-07-709864-1. 3. Booch G, Maksimchuk RA, Engle MW, Young BJ, Conallen J and Houston KA. (2007) Object-oriented analysis and design with applications. 3rd ed. USA, Addison-Wesley. 691 pp. ISBN10 0-201-89551-X. ISBN13 978-0-201-89551-3. ( 43.44, 52.56). 40

Βιβλιογραφία (2/10) 4. Carrano FM and Henry T. (2013) Data abstraction and problem solving with C++: walls and mirrors. 6th ed. UK, Pearson Education Limited. 833 pp. ISBN10 0-273-76841-7, ISBN13 978-0-76841-8. 5. Deitel HM and Deitel PJ. (2010) C++ προγραμματισμός. 6η Έκδοση. Ελλάδα, Εκδόσεις Μ. Γκιούρδα. 1448 σελ. ISBN13 978-960-512-591-2. 6. Fowler M. (1999) Refactoring: improving the design of existing code. USA, Addison Wesley Longman, Inc. 431 pp. ISBN13 978-0-201-48567-7. ( 38.62, 49.05). 41

Βιβλιογραφία (3/10) 7. Fowler M. (2004) UML distilled: a brief guide to the standard object modeling language. 3rd ed. USA, Pearson Education, Inc. 175 pp. ISBN13 978-0-321-19368-1. ( 30.10, 38.23). 8. Kruse RL and Ryba AJ. (1999) Data structures and program design in C++. USA, Prentice Hall. 717 pp. ISBN 0-13- 082640-5. ( 40.74). 9. Lafore R. (2006) Αντικειμενοστρεφής προγραμματισμός με τη C++. Ελλάδα, Εκδόσεις Κλειδάριθμος. 1040 σελ. ISBN10 960-209-904-6. 42

Βιβλιογραφία (4/10) 10. Lafore, R. (2002) Object-oriented programming in C++. 4th ed. USA, Sams Publishing. 1012 pp. ISBN-10 0-672-32308-7. ISBN-13 978-0-672-32308-9. ( 29.60, 33.35). 11. Lakos, J. (1996) Large-Scale Software Design in C++. USA, Addison-Wesley. 852 pp. ISBN-10 0-201-63362-0. ISBN-13 978-0-201-63362-7. ( 26.26, 30.20). 12. MacLennan BJ. (1987) Principles of programming languages: design, evaluation, and implementation. 2nd ed. USA, CBS College Publishing. 568 pp. ISBN 0-03-021999-X. ( 8.00). 43

Βιβλιογραφία (5/10) 13. Martin RC. (2012) Agile software development: principles, patterns, and practices. USA, Pearson Education, Inc. 529 pp. ISBN10 0-13-276068-4. ISBN13 978-0-13-276058-4. ( 54.21, 65.59). 14. McConnell S. (1993) Code complete: a practical handbook of software construction. USA, Microsoft Press. 857 pp. ( 25.99). 15. McConnell S. (1996) Rapid development: taming wild software schedules. USA, Microsoft Press. 647 pp. ISBN 1-55615-900-5. ( 25.99). 44

Βιβλιογραφία (6/10) 16. McConnell S. (2004) Professional software development: shorter schedules, higher quality products, more successful projects, enhanced careers. USA, Addison-Wesley. 243 pp. ISBN 0-321-19367-9. ( 19.79, 29.08). 17. McDermid J, ed. (1991) Software engineer s reference book. Great Britain, Butterworth-Heinemann Ltd. 1140 pp. ISBN 0-7506-0813-7. ( 40.00). 18. Meyers S. (1996) More effective C++: 35 new ways to improve your programs and designs. USA, Addison-Wesley. 318 pp. ISBN 0-201-63371-X. ( 25.29, 36.90). 45

Βιβλιογραφία (7/10) 19. Meyers S. (2005) Effective C++: 55 specific ways to improve your programs and designs. 3rd ed. USA, Pearson Education, Inc. 297 pp. ISBN 0-321-33487-6. ( 18.52, 27.01). 20. Pressman RS. (2005) Software engineering: a practitioner s approach. 6th int. ed. Singapore, McGraw-Hill. 912 pp. ISBN 007-123840-9. ( 45.06, 65.83). 21. Reddy M. (2011) API design for C++. USA, Morgan Kaufmann Publishers. 441 pp. ISBN13 978-0-12-385003-4. ( 28.01, 32.21). 22. Sahni S. (2004) Δομές δεδομένων, αλγόριθμοι, και εφαρμογές στη C++. Ελλάδα/ΗΠΑ, Εκδόσεις Τζιόλα/McGraw-Hill. 852 σελ. ISBN10 960-418-030-4. ( 66.56). 46

Βιβλιογραφία (8/10) 23. Savitch W and Mock K. (2013) Πλήρης C++. 4η Έκδοση. Ελλάδα, Εκδόσεις Τζιόλα. 1024 σελ. ISBN13 978-960-418-358-6. ( 76.14). 24. Savitch W. (2015) Java: and introduction to problem solving and programming. 7th ed. USA, Pearson Education, Inc. 989 pp (+204 pp web chapters). ISBN10 0-13-376626-8. ISBN13 978-0- 376626-4. ( 83.99, 97.85 104.75, $122.68). 25. Schildt H. (2000) Ο οδηγός της C++. 3η Έκδοση, Εκδόσεις Μ. Γκιούρδα. 748 σελ. ISBN10 960-512-229-4. ( 29.00). 26. Schildt H. (2004) Μάθετε τη C++ από το μηδέν. 3η Έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 660 σελ. ISBN10 960-209-731-0. ( 46.90). 47

Βιβλιογραφία (9/10) 27. Sommerville I. (2004) Software Engineering. 7th ed. USA, Addison-Wesley. 759 pp. ISBN 0-321-21026-3. ( 40.95, 60.17). 28. Stroustrup B. (2000) The C++ programming language. Special Edition. USA, Addison-Wesley Longman, Inc. 1020 pp. ISBN 0-201-70073-5. ( 37.20, 54.26). 29. Sutter H and Alexandrescu A. (2005) C++ coding standards: 101 rules, guidelines, and best practices. USA, Pearson Education, Inc. 220 pp. ISBN10 0-321-11358-6. ISBN13 978-0-321-11358-0. ( 19.71, 22.67). 48

Βιβλιογραφία (10/10) 30. Sutter H. (2000) Exceptional C++: 47 engineering puzzles, programming problems, and solutions. USA, Addison- Wesley Longman, Inc. 215 pp. ISBN10 0-201-61562-2. ISBN13 978-0-201-61562-3. ( 24.32, 27.97). 31. Sutter H. (2002) More exceptional C++: 40 new engineering puzzles, programming problems, and solutions. USA, Pearson Education, Inc. 279 pp. ISBN10 0-201-70434-X. ISBN13 978-0-201-70434-1. ( 28.05, 32.26). 32. Χατζηγιαννάκης ΝΜ. (2014) Η γλώσσα C++ σε βάθος. 2η αναθεωρημένη έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 974 σελ. ISBN13 978-960-461-620-6. ( 89.00). 49

Τέλος Ενότητας

Σημείωμα Αναφοράς Copyright ΤΕΙ Δυτικής Μακεδονίας, Σίσιας Γεώργιος. «Προγραμματισμός ΙΙ». Έκδοση: 1.0. Κοζάνη 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: 51

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 52

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