ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

Σχετικά έγγραφα
Aντικειμενοστραφής. Προγραμματισμός. Κληρονομικότητα

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

ΔΙΑΒΗΣΗ -ΠΑΙΔΙ ΚΑΙ ΔΙΑΣΡΟΦΗ

ATTRACT MORE CLIENTS ΒΕ REMARKABLE ENJOY YOUR BUSINESS ΣΕΛ. 1

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

1 η Προαπαιτούµενη. Κάθε οµάδα θα δηµιουργήσει ένα πρόγραµµα, µε πιο «πολύπλοκη» κληρονοµικότητα µε ιεραρχίες ή και πολλαπλή κληρονοµικότητα.

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

x και επειδή είμαι ρσμευήπ, διαςηοεί ρςαθεοό ποόρημξ. f x 2f x x x x x 2 x x x g x 0 g x f x x 0 f x x, 1 f x 2f x x x x g x 0 για κάθε

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

ΠΟΤΔΑΣΗΡΙΟ ΝΕΟΕΛΛΗΝΙΚΗ ΓΛΩΑ. Δραγάτςη 8, Πειραιάσ Ιερ. Πατριάρχου 45, Αμπελόκηποι

ΦΥΣΙΚΗ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΧΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ ΘΔΜΑ Α ΘΔΜΑ Β

ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΡΟΓΡΑΜΜΑ ΜΑΘΗΜΑΣΩΝ Γ.Ν. ΑΜΥΙΑ

Διδακτική τωμ Μαθηματικώμ (Β Φάση ΔΙ.ΜΔ.Π.Α)

Πανεπιστήμιο Πατρών ΟΝΣΟΚΕΝΣΡΙΚΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΙΙ (C++) Κληπονομικόηηηα. Σμήμα Μηχανικών Ηλεκηπονικών Τπολογιζηών και Πληποθοπικήρ

ΦΥΣΙΚΗ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΧΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ

Φσζική Γ Λσκείοσ. Θεηικής & Τετμολογικής Καηεύθσμζης. Μηταμικά Κύμαηα Αρμομικό Κύμα - Φάζη. Οκτώβρης Διδάζκωμ: Καραδημηηρίοσ Μιτάλης

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

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

Κξιμχμικά δίκςσα ρςξ Internet Η μέα ποόκληρη ρςημ επικξιμχμία για ςη μέα γεμιά

ΧΗΥΙΑΚΟ ΔΚΠΑΙΔΔΤΣΙΚΟ ΒΟΗΘΗΜΑ «ΥΤΙΚΗ ΘΔΣΙΚΗ ΚΑΙ ΣΔΦΝΟΛΟΓΙΚΗ ΚΑΣΔΤΘΤΝΗ» 1 o ΔΙΑΓΩΝΙΜΑ ΙΑΝΟΤΑΡΙΟ 2015: ΔΝΔΔΙΚΣΙΚΔ ΑΠΑΝΣΗΔΙ

ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ

ΧΗΥΙΑΚΟ ΔΚΠΑΙΔΔΤΣΙΚΟ ΒΟΗΘΗΜΑ «ΥΤΙΚΗ ΘΔΣΙΚΗ ΚΑΙ ΣΔΦΝΟΛΟΓΙΚΗ ΚΑΣΔΤΘΤΝΗ» ΦΥΣΙΚΗ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΧΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ

Επαμαληπτική Άσκηση Access

ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ

3 η ΕΝΟΤΗΤΑ Ρύθμιση σήματος

2 η ΕΝΟΤΗΤΑ Απεικόνιση και καταγραφή των Δεδομένων Ρύθμιση σήματος

Τ ξ ε ύ ο ξ π ς ξ σ ξ ο ί ξ σ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Πλξήγηρη ρςξ διαδίκςσξ

M z ιραπέυξσμ από ςα Α 4,0,Β 4,0

ΨΗΥΙΑΚΟ ΔΚΠΑΙΔΔΤΣΙΚΟ ΒΟΗΘΗΜΑ «ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ» ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ ΘΔΜΑ Α ΘΔΜΑ Β.

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

ΤΕΙ Κεντρικής Μακεδονίας. Τμήμα ΠΜ ΤΕ & ΜΤΓ ΤΕ Σημειώσεις Εργαστήριου Βάσεων Δεδομένων Πασχάλης Γάκος ΕΔΙΠ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Κετάλαιξ 6. Τβοιδικέπ Δξμέπ Δεδξμέμχμ

ΧΖΥΘΑΙΟ ΔΙΠΑΘΔΔΤΣΘΙΟ ΒΟΖΗΖΛΑ «ΥΤΘΙΖ ΗΔΣΘΙΖ ΙΑΘ ΣΔΦΜΟΚΟΓΘΙΖ ΙΑΣΔΤΗΤΜΖ» ΦΥΣΙΚΗ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΧΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ ΘΔΜΑ Α ΘΔΜΑ Β (1) n n n 90 ή (2)

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

ΠΕΡΙΕΧΟΜΕΝΑ 1. ΔΤΝΑΣΟΣΗΣΕ 3 2. ΓΡΗΓΟΡΗ ΕΚΚΙΝΗΗ (QUICK START) - ΙΟΚΡΑΣΗ 4 3. ΑΝΑΛΤΣΙΚΗ ΕΠΕΞΗΓΗΗ 5

ΨΗΥΙΑΚΟ ΔΚΠΑΙΔΔΤΣΙΚΟ ΒΟΗΘΗΜΑ «ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ» 1 o ΔΙΑΓΩΝΙΜΑ ΔΔΚΔΜΒΡΙΟ 2015: ΔΝΔΔΙΚΣΙΚΔ ΑΠΑΝΣΗΔΙ

ΣΕΛΙΚΗ ΕΠΑΝΑΛΗΨΗ ΜΗΧΑΝΙΚΗ ΑΠΡΙΛΙΟ Σςξ ρυήμα (α) ταίμεςαι έμα ελεύθεοξ ρςεοεό, ςξ ξπξίξ ρςοέτεςαι σπό ςημ επίδοαρη ςξσ ζεύγξσπ

ΧΗΥΙΑΚΟ ΔΚΠΑΙΔΔΤΣΙΚΟ ΒΟΗΘΗΜΑ «ΥΤΙΚΗ ΘΔΣΙΚΗ ΚΑΙ ΣΔΦΝΟΛΟΓΙΚΗ ΚΑΣΔΤΘΤΝΗ» ΦΥΣΙΚΗ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΧΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ

ΣΥΠΥΔΑ. ΣΥζηημα διασείπιζηρ ΠΥπκαγιών ζε ΔΑζη κωνοθόπων. www. sypyda.gr

Εμημεοχςική Επιρςξλή Νξ 65/2016

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

ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ

Τ ξ ε ύ ο ξ π ς ξ σ ξ ο ί ξ σ _ Ι ε ο α μ ε ι κ ό π

ΜΟΥΣΙΚΗ ΣΕ ΠΡΩΤΗ ΒΑΘΜΙΔΑ. Παρουσιάσεις εκπαιδευτικού υλικού και διδακτικής μεθοδολογίας 1-2

Η λειςξσογία ςξσ Βσζαμςιμξύ Νεοόμσλξσ

1o ΚΕΦΑΛΑΙΟ ΜΗΧΑΝΙΚΔΣ ΤΑΛΑΝΤΩΣΔΙΣ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Phishing s. Τι είναι και Τρόποι αντιμετώπιςησ τουσ. Ευςταθίου Κωνςταντίνοσ. Λαμπιδονίτη Χριςτίνα. Απρίλιοσ, Λευκωςία

Αρ. Υακ.: Α.Ι.Σ. 1 /2013 Α.Κ.Ι. 1/2011

Services SMART. Messaging. Bulk SMS. SMS messaging services THE + Services. IP Digital

ΠΡΟ: ΚΟΗΝ: ΘΕΜΑ:"Αμακξίμωρη-Ποόρκληρη για μεςάςανη σπαλλήλωμ ρςξ Γεμικό Νξρξκξμείξ Καοδίςραπ."

Ermis Design. Ιατηγορία: DESIGN / VISUAL COMMUNICATION / ΟΠΞΩΗΖΘΙΑ ΔΘΑΤΖΛΘΡΘΙΑ ΔΜΣΟΑ

ΜΕΘΟΔΟΛΟΓΙΑ ΑΣΚΗΣΕΩΝ 1ου ΚΕΦΑΛΑΙΟΥ. 1o ΚΔΦΑΛΑΙΟ ΜΗΧΑΝΙΚΔΣ ΤΑΛΑΝΤΩΣΔΙΣ

ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ

ΝΕΤΡΩΝΙΚΑ ΔΙΚΣΤΑ - ΔΟΜΕ ΔΕΔΟΜΕΝΩΝ

ΥΤΙΚΗ ΟΜΑΔΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ ΘΔΣΙΚΩΝ ΠΟΤΔΩΝ 6 ο ΔΙΑΓΩΝΙΜΑ (Δφ' όλης της ύλης) - ΘΔΜΑΣΑ

άρθρο ΜΟΥΣΙΚΗ ΣΕ ΠΡΩΤΗ ΒΑΘΜΙΔΑ 1-2 Η συμβολή του εκπαιδευτικού υλικού στην εκπαιδευτική έρευνα και πράξη 7 ο & 8 ο ΤΕΥΧΟΣ ISSN Χ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Σηµειώσεις Εργαστηρίου)

Θεωρία τησ Πληροφορίασ (Θ) ΔΙΔΑΚΩΝ: Δρ. Αναςτάςιοσ Πολίτησ

Σςη βιβλιξθήκη ρσμάμςηρα ςξμ Βιβλιξπόμςικα πξσ έφαυμε για δξσλειά. Μάοιξπ Σςασοίδηπ Β1 Έφαυμα έμα οξζ βιβλίξ με υοσρόρκξμη.

ΑΔΑ: 4ΑΘΩ7ΛΡ-Ψ ΠΕΡΙΛΗΦΗ ΔΙΑΚΗΡΤΞΗ ΑΝΑΡΣΗΣΔΑ ΣΟ ΓΙΑΓΙΚΣΤΟ

Ermis Digital. Καςηγξοία: Websites - Self-Promotion Sites. Τίςλξπ Σσμμεςξυήπ: Lovable Instant Personal Snapcards

Φσζική Γ Λσκείοσ. Κύμαηα. Θεηικής & Τετμολογικής Καηεύθσμζης. Διδάζκωμ: Καραδημηηρίοσ Μιτάλης. Πηγή: Study4exams.

ΠΡΟ: Υξιςηςέπ, Ακαδημαϊκό και Διξικηςικό Ποξρωπικό ΓΤΜΝΑΣΗΡΙΟ

ζρήκα 1 β τπόπορ (από σύγκπιση τπιγώνων):

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

Κύοιξ Συέδιξ Δοάρηπ ςηπ Αγξοάπ ςωμ Εμπξοεσμαςικώμ Μεςατξοώμ και ςωμ Logistics ςηπ Ελλάδαπ. Σωςήοηπ Σ. Τοιυάπ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Ermis Digital. Καςηγξοία: Web Campaigns Commercial Public Services. Τίςλξπ Σσμμεςξυήπ: Μέρα και ένω από ςξ ρπίςι

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

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

«Να μημ χαθεί μια ακόμη γεμιά...» Ρομά και δικαίωμα στημ εκπαίδευση: όταμ το σχολείο είμαι η μόμη ελπίδα

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

ΓΔΝΙΚΟ ΔΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

6 ξ Παμαορακειακό Μαθηςικό Σσμέδοιξ Σε έμαμ κόρμξ πξσ αλλάζει: Τξ δικαίχμα ρςημ εκπαίδεσρη και η εκπαίδεσρη ρςα αμθοώπιμα δικαιώμαςα

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

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

Σπκπιεξσκαηηθέο ζεκεηώζεηο (ECDL) Δπεμεξγαζίαο Κεηκέλνπ Microsoft Word 2013

Δ. Κοντογιώργη, δερματολόγος- αφροδισιολόγος

υξλή : Σευμξλξγικώμ εταομξγώμ Σμήμα : Μηυαμξλόγχμ μηυαμικώμ ς.ε Πςσυιακή εογαρία Σίςλξπ πςσυιακήπ εογαρίαπ :

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Κοινές προδιαγραφές όλων των επιπέδων

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ημεοίδα: Η Αγοξδαρξπξμία ρςα πλαίρια ςηπ μέαπ ΚΑΠ , Καβάλα, 5 Ιξσμίξσ Δο. Άμμα Σιδηοξπξύλξσ

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Κεφάλαιο 3o. Γεωμετρία Α Λσκείοσ

Εξίσωση - Φάση Αρµονικού Κύµατος 4ο Σετ Ασκήσεων - Χειµώνας Επιµέλεια: Μιχάλης Ε. Καραδηµητριου, MSc Φυσικός.

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

(MICROSOFT POWERPOINT 2013)

Ermis Digital. Καςηγξοία: Digital/ Integrated Multiplatform Campaign 2. Τίςλξπ Σσμμεςξυήπ: Samsung Paralympics Campaign #Gnorisetous

Transcript:

ΑΝΣΙΚΕΙΜΕΝΟΣΡΑΦΗ ΠΡΟΓΡΑΜΜΑΣΙΜΟ(Θ) Ενότητα 5: ΑΝΣΙΚΕΙΜΕΝΟΣΡΑΦΗ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ: ΠΑΡΙ ΜΑΣΟΡΟΚΩΣΑ ΧΟΛΗ ΣΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ ΣΕ

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

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

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

Περιεχόμενα ενότητασ 1. Κληρομομικότητα 2. Ιεραρτία κληρονομικόηηηας 3. Στέζεις «Is - A» και «Has - A» 4. Βαζική κλάζη βάζης και παραγόμενες 5. Παραδείγμαηα κληρονομικόηηηας 6. Φίλιες ζσναρηήζεις 7. Φίλιες κλάζεις 8. Βαζικές και παραγόμενες κλάζεις 9. Ιδιόηηηες προζηαηεσόμενων μεηαβληηών _ μελών 10. Αλλαγή προζδιοριζμού πρόζβαζης 11. Επίπεδα κληρονομικόηηηας 12. Mελέηη περίπηωζης: Ιεραρτία κληρονομικόηηηας ηριών επιπέδων 13. Πολλαπλή κληρονομικόηηηα 14. Περιεκηικόηηηα

κοποί ενότητασ

Κληοξμξμικόςηςα Η κληοξμξμικόςηςα είμαι έμα από ςα πιξ ιρυσοά υαοακςηοιρςικά ςξσ αμςικειμεμξρςοατξύπ ποξγοαμμαςιρμξύ. Δίμαι ξ μηυαμιρμόπ πξσ επιςοέπει ρε μία κλάρη μα κληοξμξμεί όλη ςη ρσμπεοιτξοά και ςιπ ιδιόςηςεπ μίαπ άλληπ κλάρηπ. Η κλάρη πξσ κληοξμξμεί ξμξμάζεςαι παοάγχγη ή απξοοέξσρα κλάρη (derived class), εμώ η κλάρη πξσ παοέυει ςημ κληοξμξμικόςηςα ξμξμάζεςαι βαρική κλάρη (base class). Έμα από ςα πλεξμεκςήμαςα ςηπ κληοξμξμικόςηςαπ είμαι όςι επιςοέπει ςημ επαμαυοηριμξπξίηρη ςξσ κώδικα. Ατξύ γοατεί μία βαρική κλάρη και γίμει εκρταλμάςχρη, δε υοειάζεςαι μα ςημ ναμαπειοάνξσμε. Μπξοξύμε μα ςημ ποξραομόρξσμε μα λειςξσογεί ρε διάτξοεπ ρσμθήκεπ. Η επαμαυοηριμξπξίηρη σπάουξμςξπ κώδικα ενξικξμξμεί υοόμξ, υοήμα και ασνάμει ςημ ανιξπιρςία ςξσ ποξγοάμμαςξπ. 7

Κληοξμξμικόςηςα Υπξρςηοίζξμςαι 3 ςύπξι κληοξμξμικόςηςαπ: (1) public Κάθε αμςικείμεμξ μίαπ παοαγόμεμηπ κλάρηπ είμαι αμςικείμεμξ και ςηπ βαρικήπ κλάρηπ. Αμςικείμεμα μίαπ βαρικήπ κλάρηπ δεμ είμαι αμςικείμεμα ςηπ παοαγόμεμηπ κλάρηπ. Παοάδειγμα: Όλα ςα ασςξκίμηςα είμαι ξυήμαςα, αλλά δεμ ιρυύει ςξ αμςίρςοξτξ. Δπιςοέπεςαι η ποξρπέλαρη ςχμ μη ιδιχςικώμ μελώμ ςηπ βαρικήπ κλάρηπ. Η παοαγόμεμη κλάρη μπξοεί μα επιτέοει αλλαγέπ ρςα ιδιχςικά μέλη ςηπ βαρικήπ κλάρηπ, μέρχ κληοξμξμξύμεμχμ μη ιδιχςικώμ μεθόδχμ. (2) private Αμςίρςξιυη με ςη ρυέρη ρύμθερηπ (θα μελεςηθεί αογόςεοα). (3) prξtected Χοηριμξπξιείςαι ρπάμια. 8

Κληοξμξμικόςηςα Ιεοαουία κλάρεχμ Άμερη βαρική κλάρη: Κληοξμξμείςαι απ εσθείαπ (ιεοαουία εμόπ επιπέδξσ). Έμμερη βαρική κλάρη: Κληοξμξμείςαι ρε ιεοαουία δύξ ή πεοιρρόςεοχμ επιπέδχμ. Απλή κληοξμξμικόςηςα: Μία παοαγόμεμη κλάρη ρσμδέεςαι με μία μόμξ βαρική κλάρη. Πξλλαπλή κληοξμξμικόςηςα: Μία παοαγόμεμη κλάρη ρσμδέεςαι με πξλλέπ βαρικέπ κλάρειπ. Θα ποέπει μα υοηριμξπξιείςαι με ποξρξυή. 9

Ιεοαουία κληοξμξμικόςηςαπ Ιεοαοχία κληοξμξμικόςηςαπ για μέλη ακαδημαϊκήπ κξιμόςηςαπ: Μέλος Κοινόηηηας Υπάλληλος Σποσδαζηής Απόθοιηος Απλή κληρονομικότητα Ακαδημαχκός Διοικηηικός Απλή κληρονομικότητα Διοικών Διδάζκφν Απλή κληρονομικότητα Διοικών-Διδάζκφν Πολλαπλή κληρονομικότητα 10

Ιεοαουία κληοξμξμικόςηςαπ Ιεοαοχία κληοξμξμικόςηςαπ για ρχήμαςα: Στήμα 2-ΔιαζηάζεφνΣτήμα 3-ΔιαζηάζεωνΣσήμα Κύκλος Τεηράγφνο Τρίγφνο Σθαίρα Κύβος Τεηράεδρο 11

Συέρειπ «Is - A» και «Has - A» Συέρη «Is A»: σπξδηλώμει ρυέρη κληοξμξμικόςηςαπ Έμα αμςικείμεμξ μίαπ παοαγόμεμηπ κλάρηπ μπξοξύμε μα ςξ υειοιρςξύμε και χπ αμςικείμεμξ ςηπ βαρικήπ κλάρηπ. Παοάδειγμα: Ασςξκίμηςξ, Φξοςηγό, Μξςξρικλέςα Is a Όχημα Οι ιδιόςηςεπ/ρσμπεοιτξοά ςηπ κλάρηπ Όυημα ιρυύξσμ και για ςιπ κλάρειπ Ασςξκίμηςξ, Φξοςηγό, Μξςξρικλέςα. Συέρη «Has - A»: σπξδηλώμει ρυέρη ρύμθερηπ Έμα αμςικείμεμξ πεοιέυει έμα ή πεοιρρόςεοα αμςικείμεμα άλλχμ κλάρεχμ χπ μέλη. Παοάδειγμα: Ασςξκίμηςξ has 1 Μηχαμή, 1 Τιμόμι, 4 Πόοςεπκ.ς.λ. 12

Βαρική κλάρη βάρηπ και παοαγόμεμεπ Έμα αμςικείμεμξ μίαπ παοαγόμεμηπ κλάρηπ είμαι έμα (is a) αμςικείμεμξ και ςηπ βαρικήπ κλάρηπ. Παοάδειγμα: έμα Τοίγχμξ είμαι έμα Γεχμεςοικό Συήμα. Η κλάρη Τοίγχμξ κληοξμξμεί ςημ κλάρη Γεχμεςοικό Συήμα. Γεχμεςοικό Συήμα: βαρική κλάρη (base class) Τοίγχμξ: παοαγόμεμη κλάρη (derived class) Η βαρική κλάρη αμςιποξρχπεύει μία γεμικόςεοη έμμξια απ όςι η παοαγόμεμη κλάρη (ρυέρη γεμίκεσρηπ/ειδίκεσρηπ). Παοάδειγμα: Base class: Όυημα Ασςξκίμηςξ, Φξοςηγό, Βάοκα, Πξδηλάςξ, Derived class: Ασςξκίμηςξ Τξ ασςξκίμηςξ είμαι μια ειδική καςηγξοία ξυημάςχμ 13

Παοαδείγμαςα κληοξμξμικόςηςαπ Base class Σποσδαζηής Στήμα Δάνειο Υπάλληλος Λογαριαζμός Derived classes Μεηαπηστιακός Προπηστιακός Κύκλος Τρίγφνο Ορθογώνιο Φοιηηηικό Καηαναλφηικό Σηεγαζηικό Πλήροσς Απαζτόληζης Μερικής Απαζτόληζης Όυεφς Ταμιεσηηρίοσ 14

Βαρικέπ και παοαγόμεμεπ κλάρειπ Οοίζεςαι με ςημ εμςξλή: Τύπξπ κληοξμξμικόςηςαπ public class TwoDimensionalShape : public Shape Η ποξρπέλαρη ςχμ ιδιχςικώμ μελώμ ςηπ βαρικήπ κλάρηπ δεμ μπξοεί μα γίμει απ εσθείαπ, παοόλα ασςά ςα ιδιχςικά μέλη κληοξμξμξύμςαι και μπξοξύμε μα ςα υειοιρςξύμε μέρχ ςχμ μη ιδιχςικώμ κληοξμξμξύμεμχμ μεθόδχμ. Τα δημόρια και ποξρςαςεσμέμα μέλη ςηπ βαρικήπ κλάρηπ κληοξμξμξύμςαι και είμαι δσμαςή η απ εσθείαπ ποξρπέλαρή ςξσπ (με υοήρη ςξσ ξμόμαςξπ ςξσ μέλξσπ). Οι τίλιεπ ρσμαοςήρειπ δεμ κληοξμξμξύμςαι. Η μεςαβληςή-μέλξπ ασςήπ ςηπ καςηγξοίαπ μπξοεί μα ποξρπελαρθεί από ρσμαοςήρειπμέλη μέρα ρςημ δική ςηπ κλάρη ή ρε ξπξιαδήπξςε κλάρη πξσ κληοξμξμεί ςη δική ςηπ κλάρη. Δεμ μπξοεί μα ποξρπελαρθεί από ρσμαοςήρειπ ένω απ ασςέπ ςιπ κλάρειπ. Σσμαοςήρειπ πξσ δηλώμξμςαι ρςξ public ςμήμα μίαπ κλάρηπ με ςξ ποόθεμα friend, αλλά ξοίζξμςαι όπωπ ξι καμξμικέπ ρσμαοςήρειπ εκςόπ ςηπ κλάρηπ, χωοίπ ςξ class_name ::, και ποξρπελαύμξσμ ςα ιδιωςικά μέλη ςωμ αμςικειμέμωμ ςηπ κλάρηπ. Καςά ρσμέπεια δε απξςελξύμ ρσμαοςήρειπμέλη. 15

Φίλιεπ ρσμαοςήρειπ #include <iostream> using namespace std; class Rectangle private: int width, height; public: Rectangle() Rectangle (int x, int y) : width(x), height(y) int area() return width * height; 16

Φίλιεπ ρσμαοςήρειπ friend Rectangle duplicate (const Rectangle &param); ; // τέλος της κλάσης Rectangle Rectangle duplicate(const Rectangle &param) Rectangle res; res.width = param.width*2; res.height = param.height*2; return res; // ορισμός της φίλιας συμάρτησης χωρίς σύμδεση με τημ κλάση main () Rectangle foo; Rectangle bar (2,3); foo = duplicate (bar); cout << foo.area() << endl; Tςπικέρ πεπιπηώζειρ σπήζηρ ηων θίλιων ζςναπηήζεων είναι λειηοςπγίερ πος διεξάγονηαι ανάμεζα ζε δύο διαθοπεηικέρ κλάζειρ, πποζπελαύνονηαρ ιδιωηικά ή πποζηαηεςμένα μέλη. 17

Φίλιεπ κλάρειπ Παοόμξια με ςιπ τίλιεπ ρσμαοςήρειπ, μία τίλια κλάρη έυει μέλη με ποόρβαρη ρε ιδιχςικά ή ποξρςαςεσμέμα μέλη έςεοηπ κλάρηπ: #include <iostream> using namespace std; class Square; class Rectangle private: int width, height; public: int area () return (width * height); 18

void convert (Square a); ; // τέλος της κλάσης Rectangle class Square friend class Rectangle; private: int side; public: Square (int a) : side(a) ; // τέλος της κλάσης Square void Rectangle::convert (Square a) width = a.side; height = a.side; Φίλιεπ κλάρειπ 19

Φίλιεπ κλάρειπ main () Rectangle rect; Square sqr (4); rect.convert(sqr); cout << rect.area(); Σε ασςό ςξ παοάδειγμα η κλάρη Rectangle είμαι τίλια κλάρη ςηπ κλάρηπ Square, επιςοέπξμςαπ ρςιπ ρσμαοςήρειπ μέλη ςηπ Rectangle μα έυξσμ ποόρβαρη ρςα ιδιχςικά και ποξρςαςεσμέμα μέλη ςηπ Square. Η Rectangle έυει ποόρβαρη ρςη μεςαβληςή-μέλξπ Square::side, η ξπξία πεοιγοάτει ςημ πλεσοά ςξσ ςεςοαγώμξσ. Ανίζει μα ρημειχθεί όςι ρςημ αουή ςξσ ποξγοάμμαςξπ σπάουει κεμή δήλχρη ςηπ κλάρηπ Square. Η δήλχρη είμαι απαοαίςηςη διόςι η κλάρη Rectangle υοηριμξπξιεί ςη Square (χπ παοάμεςοξ ρςξ μέλξπ convert) και η Square υοηριμξπξιεί ςη Rectangle (δηλώμξμςάπ ςημ χπ τίλια). 20

Φίλιεπ κλάρειπ Δεμ σπάουει αμξιβαιόςηςα ρςημ έμμξια ςηπ τίλιαπ κλάρηπ, καθώπ ςξ πξιξπ είμαι τίλιξπ ποξπ πξιξμ καθξοίζεςαι οηςά και δεμ σπξμμξείςαι: Σςξ παοάδειγμα η κλάρη Rectangle θεχοείςαι τίλια ςηπ κλάρηπ Square, αλλά η Square δε θεχοείςαι τίλια από ςη Rectangle. Καςά ρσμέπεια, ξι ρσμαοςήρειπ-μέλη ςηπ κλάρηπ Rectangle μπξοξύμ μα έυξσμ ποόρβαρη ρςα ιδιχςικά και ποξρςαςεσμέμα μέλη ςηπ Square αλλά όυι ςξύμπαλιμ. Δνσπακξύεςαι όςι ρε πεοίπςχρη πξσ η Square δηλχθεί τίλια κλάρη ςηπ Rectangle, απξκςά ςη ρυεςική ποόρβαρη. Η ιδιόςηςα ςχμ τίλιχμ ρσμαοςήρεχμ και κλάρεχμ δεμ είμαι μεςαβιβάριμη: Η τίλια κλάρη μίαπ κλάρηπ τίλιαπ ποξπ ςοίςη δε θεχοείςαι τίλια ποξπ ςημ ςοίςη, εκςόπ κι αμ ξοιρθεί οηςά. 21

Βαρικέπ και παοαγόμεμεπ κλάρειπ Ποξρπέλαρη ποξρςαςεσόμεμχμ μελώμ μελώμ: Δμδιάμερξ επίπεδξ ποξρςαρίαπ δεδξμέμχμ μεςανύ public και private. Η ποξρπέλαρη ςχμ ποξρςαςεσόμεμχμ μελώμ είμαι ετικςή ρε: Μέλη ςηπ βαρικήπ κλάρηπ Φίλιεπ ρσμαοςήρειπ ςηπ βαρικήπ κλάρηπ Μέλη ςηπ παοαγόμεμηπ κλάρηπ Φίλιεπ ρσμαοςήρειπ ςηπ παοαγόμεμηπ κλάρηπ 22

Ιδιόςηςεπ ποξρςαςεσόμεμχμ μεςαβληςώμ _ μελώμ Πλεξμεκςήμαςα: Οι παοαγόμεμεπ κλάρειπ μπξοξύμ μα αλλάνξσμ ςιπ ςιμέπ ςχμ πεδίχμ απ εσθείαπ. Υπάουει μικοή βελςίχρη ςηπ ςαυύςηςαπ καθώπ απξτεύγεςαι η κλήρη ςχμ μεθόδχμ set/get. Μειξμεκςήμαςα: Δεμ ποξρτέοξμςαι για έλεγυξ εγκσοόςηςαπ ςιμώμ, καθώπ η παοαγόμεμη κλάρη μπξοεί μα δώρει μη-επιςοεπςή ςιμή. Δημιξσογία ρυέρεχμ ενάοςηρηπ: Οι μέθξδξι ςηπ παοαγόμεμηπ κλάρηπ είμαι πιξ πιθαμόμ ςώοα μα εναοςώμςαι από ςημ σλξπξίηρη ςηπ βαρικήπ κλάρηπ. Δάμ αλλάνει η σλξπξίηρη ςηπ βαρικήπ κλάρηπ μπξοεί μα υοειαρςεί μα ςοξπξπξιήρξσμε και ςημ παοαγόμεμη κλάρη. 23

class Account protected: float balance; public: Account() balance = 0; Account(float balance1) balance = balance1; Κληοξμξμικόςηςα 24

Κληοξμξμικόςηςα void withdraw(float money) if (money <= balance) balance = balance money; else cout << Τξ πξρό αμάληφηπ σπεοβαίμει ςξ ςοέυξμ! << endl; void deposit(float money) balance += money; float getbalance() return balance; ; // τέλος της κλάσης account 25

Κληοξμξμικόςηςα class AccInter : public Account public: void interest() balance += balance*0.1; ; main() AccInter a1; cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance() << endl; a1.deposit(100); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance() << endl; a1.interest(); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance() << endl; 26

Κληοξμξμικόςηςα Σςξ ποξηγξύμεμξ παοάδειγμα ξοίζξμςαι δύξ κλάρειπ, η Account και η AccInter. Η ποόςαρη class AccInter : public Account καθξοίζει ςη ρχέρη ςηπ κληοξμξμικόςηςαπ. Η AccInter είμαι η παοάγωγη κλάρη και κληοξμξμεί όλεπ ςιπ δσμαςόςηςεπ ςηπ βαρικήπ κλάρηπ Account. Σςη main() δημιξσογξύμε έμα αμςικείμεμξ ςηπ κλάρηπ AccInter: AccInter a1; Σςξ αμςικείμεμξ δίμεςαι αοχική ςιμή 0, αμ και δεμ σπάοχει ρσμάοςηρη εγκαςάρςαρηπ ρςημ κλάρη AccInter. Όςαμ δεμ σπάοχει ρσμάοςηρη εγκαςάρςαρηπ ρςημ παοάγωγη κλάρη, χοηριμξπξιείςαι η ρσμάοςηρη εγκαςάρςαρηπ από ςη βαρική κλάρη. 27

Κληοξμξμικόςηςα Τξ αμςικείμεμξ a1 ςηπ κλάρηπ AccInter υοηριμξπξιεί ςιπ ρσμαοςήρειπ deposit() και getbalance() ςηπ κλάρηπ Account. Καςά ςξμ ίδιξ ςοόπξ, όςαμ ξ μεςαγλχςςιρςήπ δε βοίρκει κάπξια ρσμάοςηρη ρςημ παοάγχγη κλάρη - δηλαδή ςημ κλάρη ρςημ ξπξία ςξ a1 είμαι μέλξπ - αμαζηςά ςη ρσμάοςηρη ασςή ρςη βαρική κλάρη. Τξ δεδξμέμξ balance ρςημ κλάρη Account έυει δηλχθεί χπ protected. Ασςό ρημαίμει όςι ςξ δεδξμέμξ μπξοεί μα ποξρπελαρθεί από ρσμαοςήρειπ-μέλη μέρα ρςημ δική ςξσ κλάρη ή ρε ξπξιαδήπξςε κλάρη πξσ κληοξμξμεί ςη δική ςξσ κλάρη. Δεμ μπξοεί μα ποξρπελαρθεί από ρσμαοςήρειπ ένχ απ ασςέπ ςιπ κλάρειπ, όπχπ π.υ. η main(). 28

Κληοξμξμικόςηςα Πίμακαπ ποξρπελαριμόςηςαπ (η παοάγωγη κλάρη παοάγεςαι με δημόρια ποόρβαρη) Μέλη βαρικήπ κλάρηπ Ποξρπελάριμα από ςη δική ςηπ κλάρη Ποξρπελάριμα από ςημ παοάγχγη κλάρη Ποξρπελάριμα από αμςικείμεμα ένχ από ςημ κλάρη public μαι μαι μαι protected μαι μαι όυι private μαι όυι όυι 29

Κληοξμξμικόςηςα Θα ποέπει μα ςξμιρθεί όςι η κληοξμξμικόςηςα δεμ λειςξσογεί αμςίρςοξτα. Η βαρική κλάρη δεμ κληοξμξμεί ςιπ δσμαςόςηςεπ ςηπ παοάγχγηπ κλάρηπ. Για παοάδειγμα, εάμ δηλώρξσμε ρςη main() Account a2; ςξ αμςικείμεμξ ασςό μπξοεί μα υοηριμξπξιήρει ςιπ ρσμαοςήρειπ-μέλη ςηπ δικήπ ςξσ κλάρηπ, αλλά δεμ μπξοεί, για παοάδειγμα, μα υοηριμξπξιήρει ςη ρσμάοςηρη interest() ςηπ κλάρηπ AccInter. 30

Κληοξμξμικόςηςα Παοάδειγμα: (1) Υλξπξίηρη υχοίπ υοήρη protected μεςαβληςώμ-μελώμ class rectangle private: float side_a, side_b; public: ρσμαοςήρειπ δόμηρηπ / απξδόμηρηπ... float area() return side_a * side_b; void show() cout << side_a << x << side_b << endl; void set_sides(float a, float b) side_a = a; side_b = b; ; // τέλος της βασικής κλάσης rectangle theory_5_inheritence_1.cpp 31

Κληοξμξμικόςηςα class box : public rectangle private: float side_c; public: ρσμαοςήρειπ δόμηρηπ / απξδόμηρηπ... float volume() return side_c * area(); void set_side_c(float c) side_c = c; ; // τέλος της παράγωγης κλάσης box Eπεηδή οη κεηαβιεηές κέιε είλαη ηδηφηηθές, ε απορρέοσζα θιάζε δελ έτεη πρόζβαζε ζε ασηές, οπόηε θαιείηαη ε ζσλάρηεζε area γηα λα ζσλεηζθέρεη ζηολ σποιογηζκό ηοσ όγθοσ. 32

Κληοξμξμικόςηςα main() rectangle a; box b; a.set_sides(10,20); cout << Rectangle a: << endl; a.show; cout << Area of rectangle a = << a.area() << endl; b.set_sides(20,20); b.set_side_c(10); cout << Volume of box b = << b.volume() << endl; cout << Area of rectangle included in box b = << b.area(); 33

Κληοξμξμικόςηςα (2) Υλξπξίηρη με υοήρη protected μεςαβληςώμ-μελώμ class rectangle prξtected: float side_a, side_b; public:... ; // τέλος της κλάσης rectangle class box : public rectangle private: float side_c; public: float volume() return side_a * side_b * side_c;... ; // τέλος της παράγωγης κλάσης box Eπεηδή οη κεηαβιεηές κέιε ηες βαζηθής θιάζες protected, ε απορρέοσζα θιάζε έτεη πρόζαβζε ζε ασηές, οπόηε δελ απαηηείηαη θιήζε ηες ζσλάρηεζες area γηα λα σποιογηζζεί ο όγθος. 34

Κληοξμξμικόςηςα Σσμαοςήρειπ δόμηρηπ ςηπ παοάγωγηπ κλάρηπ Σςξ ποξηγξύμεμξ ποόγοαμμα, εάμ θελήρξσμε μα απξδώρξσμε αουική ςιμή ρςξ αμςικείμεμξ a1 ςηπ παοάγχγηπ κλάρηπ ασςό δε θα είμαι ετικςό, γιαςί εμώ ξ μεςαγλχςςιρςήπ υοηριμξπξιεί μία ρσμάοςηρη δόμηρηπ από ςη βαρική κλάρη όςαμ είμαι υχοίπ ξοίρμαςα, δεμ μπξοεί μα ςξ κάμει για ρσμαοςήρειπ με ξοίρμαςα. Για μα ςξ πεςύυξσμε ασςό, ποέπει μα γοάφξσμε ρσμαοςήρειπ δόμηρηπ για ςημ παοάγχγη κλάρη. class AccInter : public Account public: AccInter() : Account() AccInter(float bal) : Account(bal) void interest() balance += balance*0.1; ; Η ηηκή γηα ηελ bal ηες AccInter ζα αλαδεηεζεί ζηελ bal ηες Account. 35

Κληοξμξμικόςηςα Οπόςε ςώοα μπξοξύμε μα δημιξσογήρξσμε αμςικείμεμα ςηπ παοάγχγηπ κλάρηπ και μα ςα απξδώρξσμε αουικέπ ςιμέπ: main() AccInter a1, a2(100); Όςαμ δημιξσογξύμε αμςικείμεμα ρςη main(), ςόςε καλξύμςαι ξι αμάλξγεπ ρσμαοςήρειπ δόμηρηπ για μα απξδώρξσμ αουικέπ ςιμέπ. Με ςη δήλχρη AccInter a1; εκςελείςαι η ποόςαρη AccInter() : Account() όπξσ η ρσμάοςηρη δόμηρηπ AccInter() καλεί ςημ αμςίρςξιυη ρσμάοςηρη δόμηρηπ Account() για ςημ αουικξπξίηρη ςξσ αμςικειμέμξσ. 36

Κληοξμξμικόςηςα Παοόμξια, με ςη δήλχρη εκςελείςαι η ποόςαρη AccInter a2(100); AccInter(float bal) : Account(bal) όπξσ καλείςαι η ρσμάοςηρη δόμηρηπ AccInter() με έμα όοιρμα. Ασςή με ςη ρειοά ςηπ καλεί ςημ αμςίρςξιυη ρσμάοςηρη Account() με έμα όοιρμα και ςηπ μεςαβιβάζει ςξ όοιρμα, για μα απξδξθεί χπ αουική ςιμή ρςξ αμςικείμεμξ. 37

Κληοξμξμικόςηςα Σσμαοςήρειπ δόμηρηπ ςηπ παοάγωγηπ κλάρηπ όςαμ η ςελεσςαία έχει δικέπ ςηπ μεςαβληςέπ-μέλη Δπεκςείμξμςαπ ςξ ποξηγξύμεμξ ποόγοαμμα, θεχοξύμε όςι η παοάγχγη κλάρη έυει ςη μξοτή: class AccInter : public Account private: public: ; float interest_rate; AccInter(float bal, float int_rate) : Account(bal),interest_rate(int_rate) void interest() balance += balance * interest_rate; 38

Κληοξμξμικόςηςα main() AccInter a1(100,0.1); cout << "Current balance a1 = " << a1.getbalance() << endl; a1.deposit(100); cout << "Current balance a1 = " << a1.getbalance() << endl; a1.interest(); cout << "Current balance a1 = " << a1.getbalance() << endl; 100 + 100 200 + (200 * 0.1) 39

Κληοξμξμικόςηςα Υπεοτόοςχρη ρσμαοςήρεχμ-μελώμ Σε μία παοάγχγη κλάρη μπξοξύμε μα γοάφξσμε ρσμαοςήρειπ-μέλη πξσ έυξσμ ςξ ίδιξ όμξμα με κάπξιεπ ρσμαοςήρειπ ςηπ βαρικήπ κλάρηπ. Σςξ παοάδειγμα πξσ ενεςάζξσμε, ξι ρσμαοςήρειπ deposit() και withdraw() δέυξμςαι χπ όοιρμα έμα υοημαςικό πξρό και ςξ ποξρθέςξσμ ή ςξ αταιοξύμ αμςίρςξιυα από ςξ ςοέυξμ πξρό ςξσ λξγαοιαρμξύ. Δεμ ενεςάζεςαι όμχπ η πεοίπςχρη καςά ςημ ξπξία ςξ πξρό πξσ πεομά χπ όοιρμα είμαι αομηςικό. Θα μπξοξύρε βέβαια ξ έλεγυξπ ασςόπ μα ποξρςεθεί καςεσθείαμ ρςιπ ρσμαοςήρειπ ρςη βαρική κλάρη. Για μα μημ «αλλξιώρξσμε» όμχπ ςξμ κώδικα ςηπ βαρικήπ κλάρηπ, θα ςξπξθεςήρξσμε ςξμ έλεγυξ ασςό ρςημ παοάγχγη κλάρη: 40

Κληοξμξμικόςηςα class AccInter : public Account public: AccInter() : Account() AccInter(float bal) : Account(bal) void interest() balance += balance*0.1; void deposit(float money) if (money>0) Account::deposit(money); else cout << Τξ πξρό δεμ είμαι έγκσοξ. ; void withdraw(float money) if (money>0) Account::withdraw(money); else cout << Τξ πξρό δεμ είμαι έγκσοξ. ; ; 41

Κληοξμξμικόςηςα main() AccInter a1; a1.deposit(100); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance(); a1.deposit(-10); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance(); a1.withdraw(50); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance(); a1.withdraw(-5); cout << Τοέυξμ πξρό λξγαοιαρμξύ a1 = << a1.getbalance(); 42

Κληοξμξμικόςηςα Όςαμ εκςελείςαι η ποόςαρη a1.deposit(100); καλείςαι η ρσμάοςηρη deposit(), ςημ ξπξία ξ μεςαγλχςςιρςήπ αμαζηςά ρςημ παοάγχγη κλάρη, ςη βοίρκει και ςημ εκςελεί. Δκεί γίμεςαι ξ έλεγυξπ εάμ ςξ όοιρμα είμαι θεςικό πξρό και ετόρξμ είμαι εκςελείςαι η ποόςαρη Account::deposit(money); όπξσ καλείςαι η ρσμάοςηρη deposit() ςηπ βαρικήπ κλάρηπ και ςηπ μεςαβιβάζεςαι ςξ πξρό χπ όοιρμα. Κάςι αμάλξγξ ιρυύει και για ςη ρσμάοςηρη withdraw(). Γεμικά μπξοξύμε μα πξύμε όςι όςαμ σπάουει η ίδια ρσμάοςηρη ρςη βαρική και ρςημ παοάγχγη κλάρη, ςόςε εκςελείςαι η ρσμάοςηρη ρςημ παοάγχγη κλάρη (για αμςικείμεμα ςηπ παοάγχγηπ κλάρηπ). Δπίρηπ, μα ςξμίρξσμε όςι για μα γίμει η κλήρη ςχμ ρσμαοςήρεχμ deposit() και withdraw() ςηπ βαρικήπ κλάρηπ μέρα από ςιπ αμςίρςξιυεπ ρσμαοςήρειπ ςηπ παοάγχγηπ κλάρηπ, υοηριμξπξιείςαι ξ ςελερςήπ διάκοιρηπ εμβέλειαπ ::, αλλιώπ ξι ρσμαοςήρειπ θα καλξύραμ ςξμ εασςό ςξσπ και ασςό θα ξδηγξύρε ςξ ποόγοαμμα ρε απξςσυία. 43

Κληοξμξμικόςηςα Σσμδσαρμξί ποξρπέλαρηπ Υπάουξσμ πξλλέπ δσμαςόςηςεπ ποξρπέλαρηπ. Σςξ ποόγοαμμα πξσ ακξλξσθεί μπξοξύμε μα δξύμε διάτξοξσπ ρσμδσαρμξύπ ποξρπέλαρηπ, για μα καςαμξήρξσμε πξιξι ρσμδσαρμξί είμαι έγκσοξι και θα λειςξσογήρξσμ: #include <iostream.h> class A // βασική κλάση private: int privdataa; protected: int protdataa; public: int pubdataa; ; 44

Κληοξμξμικόςηςα Σσμδσαρμξί ποξρπέλαρηπ class B : public A // κλάση που παράγεται δημόσια public: void funct( ) int a; a = privdataa; // λάθος: μη προσπελάσιμο a = protdataa; // σωστό a = pubdataa; // σωστό ; 45

class C : private A public: ; void funct( ) int a; a = privdataa; a = protdataa; a = pubdataa; Κληοξμξμικόςηςα Σσμδσαρμξί ποξρπέλαρηπ // κλάση που παράγεται ιδιωτικά Όλα ςα δημόρια και ποξρςαςεσμέμα μέλη ςηπ βαρικήπ κλάρηπ γίμξμςαι ιδιωςικά μέλη ςηπ παοάγωγηπ κλάρηπ: εμώ είμαι ποξρβάριμα από ςα σπόλξιπα μέλη ςηπ παοάγωγηπ κλάρηπ, δεμ είμαι διαθέριμα ρε κώδικα εκςόπ ςηπ κλάρηπ. // λάθος: μη προσπελάσιμο // σωστό // σωστό 46

class D : protected A public: ; void funct( ) int a; a = privdataa; a = protdataa; a = pubdataa; Κληοξμξμικόςηςα Σσμδσαρμξί ποξρπέλαρηπ // κλάση που παράγεται προστατευμέμα Όλα ςα δημόρια και ποξρςαςεσμέμα μέλη ςηπ βαρικήπ κλάρηπ γίμξμςαι ποξρςαςεσμέμα μέλη ςηπ παοάγωγηπ κλάρηπ. Η παοάγωγη κλάρη έχει ποόρβαρη ςόρξ ρςα δημόρια όρξ και ρςα ποξρςαςεσμέμα μέλη πξσ κληοξμόμηρε. // λάθος: μη προσπελάσιμο // σωστό // σωστό 47

Κληοξμξμικόςηςα Ποξρδιξοιρςικό ποόρβαρηπ κληοξμξμικόςηςαπ Μέλη βαρικήπ κλάρηπ Κληοξμξμξύμςαι από ςημ παοάγχγη κλάρη χπ... public public δημόρια public private ιδιχςικά υχοίπ ποόρβαρη public protected ποξρςαςεσμέμα private public ιδιχςικά private private ιδιχςικά υχοίπ ποόρβαρη private protected ιδιχςικά protected public ποξρςαςεσμέμα protected private ιδιχςικά υχοίπ ποόρβαρη protected protected ποξρςαςεσμέμα 48

Κληοξμξμικόςηςα Σσμδσαρμξί ποξρπέλαρηπ Σςξ ποόγοαμμα ξοίζεςαι μία βαρική κλάρη A όπξσ δηλώμξμςαι ιδιχςικά, ποξρςαςεσμέμα και δημόρια δεδξμέμα. Δπίρηπ με βάρη ςημ κληοξμξμικόςηςα, ξοίζξμςαι ςοειπ παοάγχγεπ κλάρειπ: Η B πξσ παοάγεςαι δημόρια, η C πξσ παοάγεςαι ιδιχςικά και η D πξσ παοάγεςαι ποξρςαςεσμέμα. Δίδαμε ποιμ όςι ξι ρσμαοςήρειπ-μέλη ςχμ παοάγχγχμ κλάρεχμ μπξοξύμ μα ποξρπελάρξσμ ποξρςαςεσμέμα και δημόρια δεδξμέμα ςηπ βαρικήπ κλάρηπ. Δπίρηπ, αμςικείμεμα ςηπ παοάγχγηπ κλάρηπ δεμ μπξοξύμ μα ποξρπελάρξσμ ποξρςαςεσμέμα και ιδιχςικά δεδξμέμα ςηπ βαρικήπ κλάρηπ. Αμςικείμεμα ςηπ παοάγχγηπ κλάρηπ μπξοξύμ μα ποξρπελάρξσμ δημόρια δεδξμέμα ςηπ βαρικήπ κλάρηπ, μόμξμ ετόρξμ η κλάρη παοάγεςαι δημόρια (π.υ. η B). Αμςικείμεμα παοάγχγηπ κλάρηπ πξσ παοάγεςαι ιδιχςικά (π.υ. η C) δεμ μπξοξύμ μα ποξρπελάρξσμ ξύςε δημόρια δεδξμέμα ςηπ βαρικήπ κλάρηπ. Αμ δε δώρξσμε κάπξιξμ καθξοιρςή ποξρπέλαρηπ όςαμ δημιξσογξύμε μία κλάρη, σπξςίθεςαι όςι είμαι ιδιχςικόπ (private). 49

Αλλαγή ποξρδιξοιρμξύ ποόρβαρηπ Για μα αλλαυθεί ξ ποξρδιξοιρμόπ ποόρβαρηπ για κάπξιξ μέλξπ ςηπ βαρικήπ κλάρηπ (π.υ. μία ρσμάοςηρη), θα ποέπει μα γίμει η ακόλξσθη ποξρθήκη ρςημ παοάγχγη κλάρη: class rectangle private: float side_a, side_b; public: float area() return side_a * side_b; void show() cout << side_a << side_b << endl; void set_sides(float a, float b) side_a = a; side_b = b; ; Έρςχ όςι επιδιώκεςαι η αλλαγή ρςξμ ποξρδιξοιρμό ποόρβαρηπ ςηπ ρσμάοςηρηπ area, ώρςε μα καςαρςεί ιδιχςική. 50

Αλλαγή ποξρδιξοιρμξύ ποόρβαρηπ Η αλλαγή ποξρδιξοιρμξύ γίμεςαι μέρα από ςημ παοάγχγη To ποξρδιξοιρςικό κλάρη: using υοηριμξπξιείςαι class box : public rectangle μέρα ρςξμ υώοξ ςχμ ιδιχςικώμ δηλώρεχμ, για μα private: float side_c; using rectangle :: area; δηλώρει όςι η ρσμάοςηρη area() ςηπ κλάρηπ rectangle θα κληοξμξμηθεί χπ ιδιχςική κι όυι χπ δημόρια, όπχπ public: καθξοίζει ςξ ποξρδιξοιρςικό float volume() κληοξμξμικόςηςαπ ςηπ κλάρηπ box. Τξσ ποξρδιξοιρςικξύ using ςηπ return area() side_c; ρσμάοςηρηπ-μέλξπ ποέπει μα έπεςαι ςξ όμξμα ςηπ βαρικήπ κλάρηπ, void set_sides(float c) ακξλξσθξύμεμξ από ςξμ ςελερςή ::. side_c = c; Δεμ ξοίζεςαι η λίρςα παοαμέςοχμ ςηπ ρσμάοςηρηπ-μέλξπ, παοά μόμξ ; ςξ όμξμά ςηπ υχοίπ ςιπ παοεμθέρειπ. 51

Δπίπεδα κληοξμξμικόςηςαπ Μία κλάρη μπξοεί μα παοαυθεί από μία άλλη κλάρη, η ξπξία και η ίδια είμαι παοάγχγη. class A ; class B : public A ; class C : public B ; 52

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ Σημείξ -> Κύκλξπ -> Κύλιμδοξπ Σημείξ Zεύγξπ ρσμςεςαγμέμχμ x-y Κύκλξπ Zεύγξπ ρσμςεςαγμέμχμ x-y Ακςίμα Κύλιμδοξπ Zεύγξπ ρσμςεςαγμέμχμ x-y Ακςίμα Ύφξπ 53

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ #include <cstdlib> #include <iostream> #include <iomanip> using namespace std; const double my_pi=3.14159; class Point private: int x; // Τετμημέμη int y; // Τεταγμέμη public: Point(int x,int y); void setx(int x); int getx(); void sety(int y); int gety(); void print(); // εκτύπωση // σημείου ; // Τέλος της κλάσης Point theory_5_hier_inh_1.cpp 54

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ class Circle : public Point private: double radius; // Aκτίμα του κύκλου public: Circle(int = 0,int = 0, double radius = 0.0); void setradius(double radius); double getradius(); double getdiameter(); // Υπολογίζει τη διάμετρο double getcircumference(); // Υπολογίζει τημ περιφέρεια double getarea(); // Υπολογίζει το εμβαδόμ void print(); // Eκτύπωση αμτικειμέμου κλάσης Circle ; // Τέλος της κλάσης Circle Κληοξμξμεί ςημ Point. 55

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ class Cylinder : public Circle private: double height; // Ύψος του κυλίμδρου public: Cylinder(int = 0,int = 0,double = 0.0, double = 0.0); void setheight(double height); double getheight(); double getarea(); // Υπολογίζει το εμβαδόμ double getvolume(); // Υπολογίζει τομ όγκο void print(); ; // Τέλος της κλάσης Cylinder Κληοξμξμεί ςημ Circle, η ξπξία έχει κληοξμξμήρει ςημ Point. 56

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ Point :: Point(int xvalue,int yvalue) : x(xvalue), y(yvalue) void Point :: setx(int xvalue) x = xvalue; int Point :: getx() return x; void Point :: sety(int yvalue) y = yvalue; int Point :: gety() return y; void Point :: print() cout << '[' << x << ", " << y << ']'; Δοκεηής ηες Point 57

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ Circle::Circle(int xvalue,int yvalue,double radiusvalue) : Point(xValue,yValue) setradius(radiusvalue); // ή αλλιώς ο κώδικας της setradius void Circle::setRadius(double radiusvalue) if (radiusvalue < 0.0) radius = 0.0; else radius = radiusvalue; double Circle::getRadius() return radius; Δξμηςήπ ςηπ Circle, όπξσ αοχικξπξιξύμςαι και ξι κληοξμξμξύμεμεπ μεςαβληςέπ από ςημ Point. 58

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ double Circle::getDiameter() return 2 * getradius(); double Circle::getCircumference() return my_pi * getdiameter(); double Circle::getArea() return my_pi * getradius() * getradius(); void Circle::print() cout << "Center = "; Point::print(); cout << "; Radius = " << getradius(); Eθ λέοσ ορηζκός ηες ζσλάρηεζες print, ώζηε λα εθησπώλεηαη θαη ε αθηίλα ηοσ θύθιοσ. Καλείται η σσνάρτηση print της βασικής ως προς τη Circle κλάσης Point, με τρήση τοσ τελεστή::. 59

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ Cylinder::Cylinder(int xvalue, int yvalue, double radiusvalue, double heightvalue ) : Circle( xvalue, yvalue, radiusvalue ) setheight( heightvalue ); void Cylinder::setHeight(double heightvalue) if (heightvalue < 0.0) height = 0.0; else height = heightvalue; double Cylinder::getHeight() return height; Δξμηςήπ ςηπ Cylinder, όπξσ αοχικξπξιξύμςαι και ξι κληοξμξμξύμεμεπ μεςαβληςέπ από ςημ Circle και, έμμερα, ασςέπ ςηπ Point. 60

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ double Cylinder::getArea() return 2 * Circle::getArea() + getcircumference() * getheight(); Καλείται η σσνάρτηση getarea της βασικής ως προς τη Cylinder κλάσης Circle, με τρήση τοσ τελεστή::. double Cylinder::getVolume() return Circle::getArea() * getheight(); void Cylinder::print() Circle::print(); cout << "; Height = " << getheight(); Καλείται η σσνάρτηση print της βασικής ως προς τη Cylinder κλάσης Circle, με τρήση τοσ τελεστή::. Eθ λέοσ ορηζκός ηες ζσλάρηεζες getarea, ώζηε λα σποιογίδεηαη πιέολ ηο εκβαδόλ ηοσ θσιίλδροσ. Eθ λέοσ ορηζκός ηες ζσλάρηεζες print, ώζηε λα εθησπώλεηαη θαη ηο ύυος ηοσ θσιίλδροσ. 61

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ Kαλείςαι η άμερα κληοξμξ- ρσμάοςηρη-μέλξπ main() Cylinder cylinder( 12, 23, 2.5, 5.7 ); Point. cout << "Initial cylinder's parameters\n"; cout << "-----------------------------\n"; cout << "\tx-coordinate is " << cylinder.getx() << "\n\ty-coordinate is " << cylinder.gety() << "\n\tradius is " << cylinder.getradius() << "\n\theight is " << cylinder.getheight(); cylinder.setx(4); // Νέα τετμημέμη cylinder.sety(8); // Νέα τεταγμέμη cylinder.setradius(5.5); // Νέα ακτίμα μξύμεμη cylinder.setheight(10.0); // Νέο ύψος ςηπ Circle. Kαλξύμςαι ξι έμμερα κληοξμξ-μξύμεμεπ ρσμαοςήρειπ-μέλη ςηπ 62

Mελέςη πεοίπςχρηπ: Ιεοαουία κληοξμξμικόςηςαπ ςοιώμ επιπέδχμ cout << "\n\n---------------------------------\n"; cout << "The new cylinder's parameters are:\n\t"; cylinder.print(); cout << fixed << setprecision(2); cout << "\n\n\tdiameter is " << cylinder.getdiameter(); Kαλείςαι η επαμακαθξοιρμέμη ρσμάοςηρη print. cout << "\n\tcircumference is " << cylinder.getcircumference(); cout << "\n\tarea is " << cylinder.getarea(); cout << "\n\tvolume is " << cylinder.getvolume(); Kαλείςαι η επαμακαθξοιρμέμη ρσμάοςηρη getarea. 63

Πξλλαπλή κληοξμξμικόςηςα Μία κλάρη μπξοεί μα παοαυθεί από πεοιρρόςεοεπ από μία κλάρειπ. class A ; class B ; class C : public A, public B ; Αμχςέοχ ξοίζξμςαι δύξ βαρικέπ κλάρειπ, ξι A και B, και μία ςοίςη κλάρη η C, η ξπξία παοάγεςαι και από ςημ Α και από ςημ Β. 64

Πξλλαπλή κληοξμξμικόςηςα Mία κλάρη μπξοεί μα δημιξσγηθεί μέρχ κληοξμξμικόςηςαπ από πεοιρρόςεοεπ ςηπ μίαπ βαρικέπ κλάρειπ, διαυχοιζόμεμεπ με κόμμα (,) ρςξμ καςάλξγξ ςχμ βαρικώμ κλάρεχμ. Για παοάδειγμα, εάμ έμα ποόγοαμμα διέθεςε μία κλάρη Output για εκςύπχρη ρςημ ξθόμη και επιθσμξύραμε δύξ κλάρειπ Rectangle και Triangle μα κληοξμξμξύμ ςα μέλη ςηπ μαζί με εκείμα μίαπ ςάνηπ Polygon, ςόςε θα γοάταμε ςξμ ακόλξσθξ κώδικα: #include <iostream> using namespace std; class Polygon protected: int width, height; 65

Πξλλαπλή κληοξμξμικόςηςα public: Polygon (int a, int b) : width(a), height(b) ; // τέλος της κλάσης Polygon class Output public: static void print (int i); ; // τέλος της κλάσης Output void Output :: print (int i) cout << i << endl; 66

Πξλλαπλή κληοξμξμικόςηςα class Rectangle : public Polygon, public Output public: Rectangle (int a, int b) : Polygon(a,b) int area () return width*height; ; // τέλος της κλάσης Rectangle 67

Πξλλαπλή κληοξμξμικόςηςα class Triangle : public Polygon, public Output public: Triangle (int a, int b) : Polygon(a,b) int area () return width*height/2; ; // τέλος της κλάσης Triangle 68

Πξλλαπλή κληοξμξμικόςηςα main() Rectangle rect (4,5); Triangle trgl (4,5); cout << endl << The area of rect = ; rect.print(rect.area()); cout << endl << The area of trgl = ; Triangle :: print(trgl.area()); theory_5_mul_inh.cpp 69

Πεοιεκςικόςηςα Η κληοξμξμικόςηςα μαπ δίμει ςη δσμαςόςηςα μα ξοίρξσμε μία ρυέρη αμάμερα ρε δύξ κλάρειπ Α και Β. Μία άλλη ρυέρη πξσ μπξοεί μα ξοιρθεί καλείςαι πεοιεκςικόςηςα. Ακξλξύθχπ έυξσμε ςημ πεοίπςχρη όπξσ έμα αμςικείμεμξ ςηπ κλάρηπ Β πεοιέυεςαι μέρα ρςημ κλάρη Α. class B ; class A B b; ; 70

Πεοιεκςικόςηςα #include <cstdlib> #include <iostream> using namespace std; class Borrow private: char studname[20]; char bdate[10]; public: Borrow() strcpy(studname, " "); strcpy(bdate, " "); theory_5_aggreg_1.cpp 71

Πεοιεκςικόςηςα ; Borrow(char studname1[], char bdate1[]) strcpy(studname, studname1); strcpy(bdate, bdate1); void readdata() cout << "Give student name:"; cin >> studname; cout << "Give date:"; cin >> bdate; void printdata() cout << "Student name: " << studname << endl; cout << "Date borrowed: " << bdate << endl; 72

Πεοιεκςικόςηςα class Book private: int number; Borrow b; public: char title[30]; Book() number = 0; strcpy(title," "); Book(int number0, char title0[], Borrow b0) number = number0; strcpy(title, title0); b = b0; 73

Πεοιεκςικόςηςα ; void readdata() cout << "Give book number:"; cin >> number; cout << "Give book title:"; cin >> title; b.readdata(); void printdata() cout << "Book number: " << number << endl; cout << "Book title: " << title << endl; b.printdata(); 74

Πεοιεκςικόςηςα main() Book bk1(1445, "C++ Programming", Borrow("SPANOS", "13/12/13")), bk2; bk1.printdata(); cout << endl; bk2.readdata(); cout << endl; bk2.printdata(); 75

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