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

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

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

Αναφορές (References)

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγικά. 1.1 Η σ-αλγεβρα ως πληροφορία

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

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

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

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

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

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

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

Οι γέφυρες του ποταμού... Pregel (Konigsberg)

Ευρωπαϊκά παράγωγα Ευρωπαϊκά δικαιώματα

Σχέσεις και ιδιότητές τους

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Πρώτη Γραπτή Εργασία. Εισαγωγή στους υπολογιστές Μαθηματικά

Εξαναγκασμένες ταλαντώσεις, Ιδιοτιμές με πολλαπλότητα, Εκθετικά πινάκων. 9 Απριλίου 2013, Βόλος

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

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

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

«ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ»

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

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

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

ΤΑΞΙΝΟΜΗΣΗ ΟΡΓΑΝΙΣΜΩΝ

τους στην Κρυπτογραφία και τα

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

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

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

Επίλυση ειδικών μορφών ΣΔΕ

Η ανισότητα α β α±β α + β με α, β C και η χρήση της στην εύρεση ακροτάτων.

17 Μαρτίου 2013, Βόλος

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

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

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

ιάσταση του Krull Α.Π.Θ. Θεσσαλονίκη Χ. Χαραλαμπους (ΑΠΘ) ιάσταση του Krull Ιανουάριος, / 27

- 1 - Ποιοι κερδίζουν από το εμπόριο αγαθών και υπηρεσιών; Γιατί η άμεση ανταλλαγή αγαθών, ορισμένες φορές, είναι δύσκολο να

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

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

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

Ας υποθέσουμε ότι ο παίκτης Ι διαλέγει πρώτος την τυχαιοποιημένη στρατηγική (x 1, x 2 ), x 1, x2 0,

Μονάδες α. Να γράψετε στο τετράδιό σας τον παρακάτω πίνακα σωστά συµπληρωµένο.

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

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

ΘΕΜΑ: Aποτελεσματικότητα της νομισματικής και δημοσιονομικής πολιτικής σε μια ανοικτή οικονομία

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

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

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

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

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

1. Εστω ότι A, B, C είναι γενικοί 2 2 πίνακες, δηλαδή, a 21 a, και ανάλογα για τους B, C. Υπολογίστε τους πίνακες (A B) C και A (B C) και

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

ΣΥΝΟΛΑ (προσέξτε τα κοινά χαρακτηριστικά των παρακάτω προτάσεων) Οι άνθρωποι που σπουδάζουν ΤΠ&ΕΣ και βρίσκονται στην αίθουσα

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

Ημέρα 3 η. (α) Aπό την εργασιακή διαδικασία στη διαδικασία παραγωγής (β) Αξία του προϊόντος και αξία της εργασιακής δύναμης

ΚΛΑΔΟΣ: ΠΕ11 ΦΥΣΙΚΗΣ ΑΓΩΓΗΣ

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

Ο τύπος του Itô. f (s) ds (12.1) f (g(s)) dg(s). (12.2) t f (B s ) db s + 1 2

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Τρίτη Γραπτή Εργασία στη Στατιστική

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

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

5.1 Μετρήσιμες συναρτήσεις

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

Επιχειρησιακή Ερευνα Ι

ΜΙΚΡΟΟΙΚΟΝΟΜΙΚΗ Η ΚΑΤΑΝΑΛΩΤΙΚΗ ΑΠΟΦΑΣΗ. Άσκηση με θέμα τη μεγιστοποίηση της χρησιμότητας του καταναλωτή

ΜΑΘΗΜΑ: ΠΟΛΙΤΙΚΗ ΟΙΚΟΝΟΜΙΑ-ΔΗΜΟΣΙΑ ΟΙΚΟΝΟΜΙΚΗ

ΘΕΜΑΤΑ ΓΙΑ ΘΕΟΛΟΓΟΥΣ

HY 280. θεμελιακές έννοιες της επιστήμης του υπολογισμού ΑΣΚΗΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ. Γεώργιος Φρ.

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

Απάντηση. // 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)?

Ημέρα 4 η (α) Αγορά και πώληση της εργασιακής δύναμης. (β) Η απόλυτη υπεραξία. Αγορά και πώληση της εργασιακής δύναμης

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ

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

{ i f i == 0 and p > 0

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

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 } {

ΑΣΚΗΣΕΙΣ ΔΙΚΤΥΑ ΠΡΟΣΒΑΣΗΣ ΑΣΚΗΣΗ 1

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

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

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

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

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

Χαρτοφυλάκια και arbitrage

Καλλιεργήστε φρέσκα μυρωδικά στο μπαλκόνι

Αναλυτικές ιδιότητες

Transcript:

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

Κλάση Βάση/Παράγωγη Τα διάφορα αντικείμενα μπορούν να έχουν μεταξύ τους σχέση ταξινόμησης π.χ Θηλαστικό Σκύλος Η C++ δίνει τη δυνατότητα απεικόνισης τέτοιων σχέσεων, ορίζοντας κλάσεις παραγόμενες από άλλες. Για παράδειγμα μπορούμε να ορίσουμε την κλάση Σκύλος ως παράγωγη της κλάσης Θηλαστικό. Σε αυτή την περίπτωση π.χ δεν χρειάζεται να ορίσουμε ότι ο Σκύλος κινείται αν έχουμε ήδη ορίσει ότι το Θηλαστικό κινείται. Η κλάση Θηλαστικό λέγεται Βάση και η Σκύλος Παράγωγη. Μία κλάση Βάση μπορεί να έχει πολλές Παράγωγες. 3 Παραγόμενες κλάσεις Ας φανταστούμε ότι πρέπει να φτιάξουμε ένα πρόγραμμα που περιγράφει μία φάρμα ζώων. Θα πρέπει να συμπεριλάβουμε κλάσεις για τα διάφορα ζώα. Όταν δηλώνουμε μία κλάση θα πρέπει να υποδεικνύουμε από ποια κλάση παράγεται, γράφοντας μετά το όνομα της κλάσης, τον τρόπο παραγωγής: class Dog : public Mammal Η κλάση Βάση ΠΡΕΠΕΙ να έχει δηλωθεί νωρίτερα. 4 2

Απλή κληρονομικότητα/1 #include <iostream.h> enum BREED { YORKIE, CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB }; class Mammal { Mammal(); ~Mammal(); int GetAge()const; void SetAge(int); int GetWeight() const; void SetWeight(); void Speak(); void Sleep(); protected: int itsage; 5 int itsweight; }; Απλή κληρονομικότητα/2 class Dog : public Mammal { Dog(); ~Dog(); BREED GetBreed() const; void SetBreed(BREED); WagTail(); BegForFood(); protected: BREED itsbreed; }; 6 3

Protected δεδομένα Η παραγώμενη κλάση, κληρονομεί από την κλάση βάσης όλα τα δεδομένα και τις συναρτήσεις, εκτός από τον τελεστή αντιγραφής, το δομητή και τον αποδομητή. Τα private μέλη δεν είναι διαθέσιμα στις παραγόμενες κλάσεις Τα protected μέλη είναι απολύτως διαθέσιμα στις παραγόμενες κλάσεις και private για το υπόλοιπο πρόγραμμα. Οι συναρτήσεις μέλη έχουν πρόσβαση σε όλα τα δεδομένα και συναρτήσεις της κλάσης τους (ακόμα και τα private) και στα public και protected μέλη των κλάσεων βάσης. 7 Παραγόμενο αντικείμενο/1 #include <iostream.h> enum BREED{YORKIE,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB}; class Mammal { Mammal():itsAge(2), itsweight(5){} ~Mammal(){} 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ʺ; } protected: int itsage; 8 int itsweight; }; 4

Παραγόμενο αντικείμενο/2 class Dog : public Mammal { Dog():itsBreed(YORKIE){} ~Dog(){} BREED GetBreed() const { return itsbreed; } void SetBreed(BREED breed) { itsbreed = breed; } void WagTail() { cout << ʺTail wagging...\nʺ; } void BegForFood() { cout << ʺBegging for food...\nʺ; } private: BREED itsbreed; }; 9 Παραγόμενο αντικείμενο/1 int main() { Dog fido; fido.speak(); fido.wagtail(); cout << ʺFido is ʺ << fido.getage() << ʺ years old\nʺ; return 0; } 10 Mammal sound! Tail wagging... Fido is 2 years old 5

Constructors & Destructors Ένα Dog αντικείμενο είναι και αντικείμενο Mammal. Όταν δημιουργείται το Fido, πρώτα καλείται ο δομητής της βάσης και μετά του Dog. Όταν το Fido καταστρέφεται πρώτα καλείται ο αποδομητής του Dog και μετά του Mammal. 11 Constructors & Destructors/1 #include <iostream.h> enum BREED{YORKIE,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB}; class Mammal { Mammal(); ~Mammal(); 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ʺ; } protected: int itsage; 12 int itsweight; }; 6

Constructors & Destructors/2 class Dog : public Mammal { Dog(); ~Dog(); BREED GetBreed() const { return itsbreed; } void SetBreed(BREED breed) { itsbreed = breed; } void WagTail() { cout << ʺTail wagging...\nʺ; } void BegForFood() { cout << ʺBegging for food...\nʺ; } private: BREED itsbreed; }; 13 Constructors & Destructors/3 Mammal::Mammal(): itsage(1), itsweight(5) { cout << ʺMammal constructor...\nʺ; } Mammal::~Mammal() { cout << ʺ\nʺ; } Dog::Dog(): itsbreed(yorkie) { cout << ʺDog constructor...\nʺ; } Dog::~Dog() { cout << ʺDog destructor...\nʺ; } int main() { Dog fido; fido.speak(); fido.wagtail(); cout << ʺFido is ʺ << fido.getage() << ʺ years old\nʺ; return 0; } Mammal constructor... Dog constructor... Mammal sound! Tail wagging... Fido is 1 years old Dog destructor... 14 7

Constructor overloading/1 #include <iostream.h> enum BREED{YORKIE,CAIRN,DANDIE,SHETLAND,DOBERMAN,LAB}; classmammal { Mammal(); Mammal(int age); ~Mammal(); int GetAge()const { return itsage; } void SetAge(int age) { itsage = age; } int tgtwiht() GetWeight() const { return itsweight; i } void SetWeight(int weight) { itsweight = weight; } void Speak()const { cout << ʺMammal sound!\nʺ; } void Sleep()const { cout << ʺshhh. Iʹm sleeping.\nʺ; } protected: int itsage; 15 int itsweight; }; Constructors & Destructors/2 class Dog : public Mammal { Dog(); Dog(int age); Dog(int age, int weight); Dog(int age, BREED breed); Dog(int age, int weight, BREED breed); ~Dog(); BREED GetBreed() const { return itsbreed; } void SetBreed(BREED breed) { itsbreed = breed; } void WagTail() { cout << ʺTail wagging...\nʺ; } void BegForFood() { cout << ʺBegging for food...\nʺ; } private: BREED itsbreed; }; 16 8

Constructor overloading/3 Mammal::Mammal(): itsage(1), itsweight(5) { cout << ʺMammal constructor...\nʺ; } Mammal::Mammal(int age): itsage(age), itsweight(5) { cout << ʺMammal(int) constructor...\nʺ; } Mammal::~Mammal() { cout << ʺ\nʺ; } Dog::Dog(): Mammal(), itsbreed(yorkie) { cout << ʺDog constructor...\nʺ; } Dog::Dog(int age): Mammal(age), itsbreed(yorkie) { cout << ʺDog(int) constructor...\nʺ; } Dog::Dog(int age, int weight): Mammal(age), itsbreed(yorkie) { itsweight = weight; cout << ʺDog(int, int) constructor...\nʺ; } 17 Constructor overloading/3 Dog::Dog(int age, int weight, BREED breed): Mammal(age), itsbreed(breed){ itsweight = weight; cout << ʺDog(int, int, BREED) constructor...\nʺ; } Dog::Dog(int age, BREED breed): Mammal(age), itsbreed(breed) { cout << ʺDog(int, BREED) constructor...\nʺ; } Dog::~Dog() { cout << ʺDog destructor...\nʺ; } 18 9

Constructor overloading/4 int main() { Dog fido; Dog rover(5); Dog buster(6,8); Dog yorkie (3,YORKIE); Dog dobbie (4,20,DOBERMAN); fido.speak(); rover.wagtail(); cout << ʺYorkie is ʺ << yorkie.getage() << ʺ years old\nʺ; cout << ʺDobbie weighs ʺ; cout << dobbie.getweight() << ʺ pounds\nʺ; return 0; } Mammal constructor... Dog constructor... Mammal(int) constructor... Dog(int) constructor... Mammal(int) constructor... Dog(int, int) constructor... Mammal(int) constructor... Dog(int, BREED) constructor... Mammal(int) constructor... Dog(int, int, BREED) constructor... Mammal sound! Tail wagging... Yorkie is 3 years old. Dobbie weighs 20 pounds. Dog destructor... Dog destructor... Dog destructor... Dog destructor... Dog destructor... 19 10