Κληρονομικότητα. Σήμερα!

Σχετικά έγγραφα
Κληρονομικότητα. Σήμερα! Κλάση Βάσης Παράγωγη κλάση Απλή κληρονομικότητα Protected δεδομένα Constructors & Destructors overloading

Ειδικά Θέματα Ι. Σήμερα!

Συναρτήσεις & Κλάσεις

Πολυμορφισμός. Σήμερα!

Classes. Σημερινό Μάθημα. Constructor και destructor Συναρτήσεις μέλη const Inline συναρτήσεις Δηλώσεις κλάσεων Σύνθετες κλάσεις

Αναφορές (References)

Pointers. Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2

Πολυμορφισμός. Σήμερα! Virtual Κληρονομικότητα Mixin classes Αφηρημένοι τύποι δεδομένων Pure Virtual συναρτήσεις

Ειδικά Θέματα. Σήμερα. Ισότητα Αντικειμένων Friend classes Operator overloading

Συναρτήσεις. Σημερινό μάθημα

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

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

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

Συναρτήσεις ΙΙ. Σημερινό μάθημα

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

Αναγνώριση Προτύπων. Σήμερα! Λόγος Πιθανοφάνειας Πιθανότητα Λάθους Κόστος Ρίσκο Bayes Ελάχιστη πιθανότητα λάθους για πολλές κλάσεις

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

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο8

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

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

Το υπόδειγμα IS-LM: Εισαγωγικά

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

Έννοια. Η αποδοχή της κληρονομίας αποτελεί δικαίωμα του κληρονόμου, άρα δεν

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

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

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

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

21/11/2005 Διακριτά Μαθηματικά. Γραφήματα ΒΑΣΙΚΗ ΟΡΟΛΟΓΙΑ : ΜΟΝΟΠΑΤΙΑ ΚΑΙ ΚΥΚΛΟΙ Δ Ι. Γεώργιος Βούρος Πανεπιστήμιο Αιγαίου

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

Αποδεικτικές Διαδικασίες και Μαθηματική Επαγωγή.

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

Ταξινόμηση των μοντέλων διασποράς ατμοσφαιρικών ρύπων βασισμένη σε μαθηματικά κριτήρια.

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

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

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

ΣΤΟ ΦΑΡΜΑΚΕΙΟ. Με την πιστοποίηση του έχει πρόσβαση στο περιβάλλον του φαρμακείου που παρέχει η εφαρμογή.

Ηλεκτρονικοί Υπολογιστές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

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

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

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

ΣΤΟ ΙΑΤΡΕΙΟ. Με την πιστοποίηση του αποκτά πρόσβαση στο περιβάλλον του ιατρού που παρέχει η εφαρμογή.

ΜΑΘΗΜΑ: ΕΜΠΟΡΙΚΟ ΔΙΚΑΙΟ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Β ΤΑΞΗ ΚΕΙΜΕΝΟ. Πέµπτη 19 Νοεµβρίου Αγαπητή Κίττυ,

Δυναμική μνήμη με πίνακες και λίστες

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

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

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

ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ Σχεδίαση Λογικών Κυκλωμάτων

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης

Αναγνώριση Προτύπων. Σημερινό Μάθημα

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

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

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

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

Διάρκεια: 2 ώρες 17/9/2009 ΘΕΜΑΤΑ 1) (2 μονάδες) Δεδομένης της περιγραφής που ακολουθεί δώστε το σχεδιασμό κλάσεων του συστήματος:

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

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

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Ασκήσεις &απαντήσεις Επανάληψης

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

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

Δήμος Σωτήριος Υ.Δ. Εργαστήριο Λογικής & Επιστήμης Υπολογιστών. Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Σ.Η.Μ.Μ.Υ. Ε.Μ.Π.

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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

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

Διδάσκων: Παναγιώτης Ανδρέου

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

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

public: Horse(){} Horse(double h,string c,string n,int a):animal(n,a){ itsheight=h; itscolor=c; } void fonialogou(){ cout<<"xlimintrisma"<<endl;} };

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

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

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

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

ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ 2014 ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ

Δομές ελέγχου ροής προγράμματος

Εργαστήριο 10 Κλάσεις

Μάθημα 1 [3/11/2015].

τεσσάρων βάσεων δεδομένων που θα αντιστοιχούν στους συνδρομητές

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Transcript:

Κληρονομικότητα Σήμερα! Overriding Overloading Vs Overriding Απόκρυψη συναρτήσεων Κλήση overridden συνάρτησης Virtual Συναρτήσεις Abstract Classes Κανόνες πρόσβασης Κληρονομικότητας 2 1

Υπερίσχυση Συναρτήσεων (overriding) Έχουμε υπερίσχυση συναρτήσεων όταν στην παράγωγη γηκλάση ξαναδημιουργείται μία συνάρτηση η της βάσης με τον ίδιο τύπο επιστροφής, όνομα και παραμέτρους και διαφορετική υλοποίηση. Όταν καλείται ένα αντικείμενο της παραγόμενης κλάσης καλείται η νέα συνάρτηση. 3 Overriding/1 #include <iostream.h> enum BREEDYORKIE,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB class Mammal Mammal() cout << ʺMammal constructor...\nʺ; } ~Mammal() cout << ʺMammal destructor...\nʺ; } int GetAge()const return itsage; } void SetAge(int age) itsage = age; } int GetWeight() const return itsweight; } void SetWeight(int weight) itsweight = weight; } void Speak()const cout << ʺMammal sound!\nʺ; } void Sleep()const cout << ʺshhh. Iʹm sleeping.\nʺ; } int itsage; 4 int itsweight; 2

Overriding/2 class Dog : public Mammal Dog() cout << ʺDog constructor...\nʺ; } ~Dog() cout << ʺDog destructor...\nʺ; } BREED GetBreed() const return itsbreed; } void SetBreed(BREED breed) itsbreed = breed; } void WagTail() cout << ʺTail wagging...\nʺ; } void BegForFood() cout << ʺBegging for food...\nʺ; } void Speak()const cout << ʺWoof!\nʺ; } private: BREED itsbreed; 5 Overriding/3 int main() Mammal biganimal; Dog fido; biganimal.speak(); fido.speak(); return 0; } Mammal constructor... Mammal constructor... Dog constructor... Mammal sound! Woof! Dog destructor... Mammal destructor... Mammal destructor... 6 3

Overloading Vs Overriding Αυτοί οι όροι μοιάζουν και κάνουν παρόμοια πράγματα Όταν κάνουμε μία συνάρτηση overloading, δημιουργούμε μία συνάρτηση με το ίδιο όνομα αλλά διαφορετικές παραμέτρους. Το overriding δημιουργεί στην παραγόμενη κλάση μία συνάρτηση με τα ίδια όνομα, παραμέτρους και τύπο επιστροφής. 7 Απόκρυψη συναρτήσεων/1 #include <iostream.h> class Mammal void Move() const cout << ʺMammal move one step\nʺ; } void Move(int distance) const cout << ʺMammal move ʺ; cout << distance <<ʺ _steps.\nʺ; } int itsage; int itsweight; 8 4

Απόκρυψη συναρτήσεων/2 class Dog : public Mammal void Move() const cout << ʺDog move 5 steps.\nʺ; } int main() Mammal biganimal; Dog fido; biganimal.move(); biganimal.move(2); fido.move(); // fido.move(10); return 0; } Mammal move one step Mammal move 2 steps. Dog move 5 steps. 9 Απόκρυψη συναρτήσεων Συμβαίνει απόκρυψη συνάρτησης όταν παραλείψουμε οποιοδήποτε τμήμα της κεφαλίδας της, ακόμα και αν είναι μόνο η λέξη const Αν έχουμε overriding σε μία συνάρτηση της βάσης, μπορούμε και πάλι να την καλέσουμε αν γράψουμε το πλήρες όνομα: Mammal::Move() 10 5

Κλήση overridden συνάρτησης/1 #include <iostream.h> class Mammal void Move() const cout << ʺMammal move one step\nʺ; } void Move(int distance) const cout << ʺMammal move ʺ; cout << distance <<ʺ _steps.\nʺ; } int itsage; int itsweight; 11 Κλήση overridden συνάρτησης/2 class Dog : public Mammal void Move()const; void Dog::Move() const cout << ʺIn dog move...\nʺ; Mammal::Move(3); } int main() Mammal biganimal; Dog fido; biganimal.move(2); fido.mammal::move(6); return 0; Mammal move 2 steps. Mammal move 6 steps. 12 6

Virtual Συναρτήσεις Μία Virtual συνάρτηση είναι συνάρτηση τις βασικής κλάσης που μπορεί να υπερκαλυφθεί από συνάρτηση της παραγόμενης κλάσης Σύνταξη virtual ret_type type FunctionName(args) 13 Virtual συναρτήσεις/1 #include <iostream.h> class Mammal Mammal():itsAge(1) cout << ʺMammal constructor...\nʺ; } ~Mammal() cout << ʺMammal destructor...\nʺ; } void Move() const cout << ʺMammal move one step\nʺ; } virtual void Speak() const cout << ʺMammal speak!\nʺ; } int itsage; 14 7

Virtual συναρτήσεις/2 class Dog : public Mammal Dog() cout << ʺDog Constructor...\nʺ; } ~Dog() cout << ʺDog destructor...\nʺ; } void WagTail() cout << ʺWagging Tail...\nʺ; } void Speak()const cout << ʺWoof!\nʺ; } void Move()const cout << ʺDog moves 5 steps...\nʺ; } int main() Mammal *pdog = new Dog; pdog >Move(); pdog >Speak(); return 0; } Mammal constructor... Dog Constructor... Mammal move one step Woof! 15 Abstract Classes Μια κλάση που έχει τουλάχιστο μία καθαρά virtual συνάρτηση λέγεται κλάση αφαίρεσης (abstract class). 16 8

Πολλαπλές Virtual συναρτήσεις/1 #include <iostream.h> class Mammal Mammal():itsAge(1) } ~Mammal() } virtual void Speak() const cout << ʺMammal speak!\nʺ; } int itsage; 17 Πολλαπλές Virtual συναρτήσεις/2 class Dog : public Mammal void Speak()const cout << ʺWoof!\nʺ; } class Cat : public Mammal void Speak()const cout << ʺMeow!\nʺ; } class Horse : public Mammal void Speak()const cout << ʺWinnie!\nʺ; } class Pig : public Mammal void Speak()const cout << ʺOink!\nʺ; } 18 9

Πολλαπλές Virtual συναρτήσεις/3 int main() Mammal* thearray[5]; Mammal* ptr; int choice, i; for ( i = 0; i<5; i++) cout << ʺ(1)dog (2)cat (3)horse (4)pig: ʺ; cin >> choice; switch (choice) case 1: ptr = new Dog; break; case 2: ptr = new Cat; break; case 3: ptr = new Horse; break; case 4: ptr = new Pig; break; default: ptr = new Mammal; break; } thearray[i] = ptr; } for (i=0;i<5;i++) thearray[i] >Speak(); return 0; } 19 Κανόνες πρόσβασης Κληρονομικότητας Τα private μέλη δεν κληρονομούνται Τα protected μέλη κληρονομούνται, αλλά δεν είναι ορατά εκτός κλάσης Η C++ έχει 3 επίπεδα ελέγχου πρόσβασης Σύνταξη: class B : είδος πρόσβασης A... Τα τρία επίπεδα είναι: public παραμένει public, protected παραμένει protected poe e public γίνεται protected, protected μένει protected private: public and protected γίνονται private 20 10

Δηλώσεις Πρόσβασης Στην κληρονομικότητα μπορεί να ξαναδηλωθεί η πρόσβαση Η νέα πρόσβαση δεν μπορεί να είναι πιο μεγάλη class A int vprot; int prot; class B : public Α A::prot; // δήλωση πρόσβασης; 21 11