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

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

Αναφορές (References)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΣΧΟΛΙΚΟ ΕΤΟΣ ΕΥΘΥΓΡΑΜΜΗ ΟΜΑΛΗ ΚΙΝΗΣΗ ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΕΞΕΤΑΣΗ ΣΤΗ ΦΥΣΙΚΗ A ΛΥΚΕΙΟΥ. Ονοματεπώνυμο Τμήμα

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

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

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

{ i f i == 0 and p > 0

17TimeThis.h function returns reference pointer to same object { return *this; }

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

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

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

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

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

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

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

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

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

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

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

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

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

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

Φροντιστήριο 2: Ανάλυση Αλγόριθμου. Νικόλας Νικολάου ΕΠΛ432: Κατανεμημένοι Αλγόριθμοι 1 / 10

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

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

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

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

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

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

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

Η εξίσωση Black-Scholes

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

Εισαγωγή στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

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

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

Δομές Δεδομένων & Αλγόριθμοι

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

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

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

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

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

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

έγγραφο σε κάθε διάσταση αντιστοιχούν στο πλήθος εμφανίσεων της λέξης (που αντιστοιχεί στη συγκεκριμένη διάσταση) εντός του εγγράφου.

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

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

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

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

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

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

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

Εφαρμογές στην κίνηση Brown

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

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

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

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

ΗΥ-150. Προγραμματισμός

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 2

Ανελίξεις σε συνεχή χρόνο

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

Φόρμα Σχεδιασμού Διάλεξης (ημ/α: 17/03/08, έκδοση: 1.0)

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

Εστω X σύνολο και A μια σ-άλγεβρα στο X. Ονομάζουμε το ζεύγος (X, A) μετρήσιμο χώρο.

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

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

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

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

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

Transcript:

Συναρτήσεις & Κλάσεις Overloading class member συναρτήσεις/1 #include <iostream.h> typedef unsigned short int USHORT; enum BOOL { FALSE, TRUE}; class Rectangle { public: Rectangle(USHORT width, USHORT height); ~Rectangle(){} void DrawShape() const; void DrawShape(USHORT awidth, USHORT aheight) const; private: USHORT itswidth; USHORT itsheight; }; 2 1

Overloading class member συναρτήσεις/2 Rectangle::Rectangle(USHORT width, USHORT height) { itswidth = width; itsheight = height; } void Rectangle::DrawShape() const { DrawShape( itswidth, itsheight); } void Rectangle::DrawShape(USHORT width, USHORT height) const { for (USHORT i = 0; i<height; i++) { for (USHORT j = 0; j< width; j++) { cout << ʺ*ʺ; } cout << ʺ\nʺ; } } 3 Overloading class member συναρτήσεις/3 int main() { Rectangle therect(30,5); cout << ʺDrawShape(): \nʺ; therect.drawshape(); cout << ʺ\nDrawShape(40,2): \nʺ; therect.drawshape(40,2); return 0; } 4 2

Overloading class member συναρτήσεις/output DrawShape(): DrawShape(40,2): 5 Προκαθορισμένες Τιμές/1 #include <iostream.h> typedef unsigned short int USHORT; enum BOOL { FALSE, TRUE}; class Rectangle { public: Rectangle(USHORT width, USHORT height); ~Rectangle(){} void DrawShape(USHORT awidth, USHORT aheight, BOOL UseCurrentVals = FALSE) const; private: USHORT itswidth; USHORT itsheight; }; Rectangle::Rectangle(USHORT width, USHORT height): itswidth(width), itsheight(height) {} 6 3

Προκαθορισμένες Τιμές/2 void Rectangle::DrawShape(USHORT width, USHORT height, BOOL UseCurrentValue ) const { int printwidth; Wdh int printheight; if (UseCurrentValue == TRUE) { printwidth = itswidth; printheight = itsheight; } else { printwidth = width; printheight = height; } for (int i = 0; i<printheight; i++) { for (int j = 0; j< printwidth; j++) { cout << ʺ*ʺ; } cout << ʺ\nʺ; } } 7 Προκαθορισμένες Τιμές/3 int main() { Rectangle therect(30,5); cout << ʺDrawShape(0,0,TRUE)...\nʺ; therect.drawshape(0,0,true); cout <<ʺDrawShape(40,2)...\nʺ; therect.drawshape(40,2); return 0; } 8 4

Προκαθορισμένες Τιμές/output DrawShape(0,0,TRUE)... DrawShape(40,2)... 9 Boolean τιμές Η C++ θεωρεί μια τιμή FALSE όταν είναι μηδέν και TRUE όλες τις άλλες τιμές. 10 5

Overloading vs Default Χρησιμοποιήστε Overloading συναρτήσεις αντί Προκαθορισμένες τιμές, όταν Δεν υπάρχει λογική προκαθορισμένη τιμή Χρειάζεστε διαφορετικές εκδοχές των διαδικασιών (αλγορίθμων) Χρειάζεστε διαφορετικές παραμέτρους εισόδου 11 Default Constructor Αν δεν δηλώσουμε constructor, o compiler χρησιμοποιεί ένα default constructor, χωρίς παραμέτρους, που δεν κάνει τίποτα. Όταν ορίσουμε έναν οποιοδήποτε constructor ο default του compiler παύει να υπάρχει. Για αυτό αν θέλουμε να υπάρχει και constructor χωρίς παραμέτρους θα πρέπει να τον ορίσουμε εμείς. Εξ ορισμού ένας constructor χωρίς παραμέτρους, ονομάζεται default constructor. O default constructor που ορίζουμε μπορεί να λειτουργεί όπως επιθυμούμε. 12 6

Constructor overloading/1 #include <iostream.h> class Rectangle { public: Rectangle(); Rectangle(int width, int length); ~Rectangle() {} int GetWidth() const { return itswidth; } int GetLength() const { return itslength; } private: int itswidth; int itslength; }; Rectangle::Rectangle() { itswidth = 5; itslength = 10; } Rectangle::Rectangle (int width, int length) { itswidth = width; itslength = length; } 13 Constructor overloading/2 int main() { Rectangle Rect1; cout << ʺRect1 width: ʺ << Rect1.GetWidth() << endl; cout << ʺRect1 length: ʺ << Rect1.GetLength() << endl; int awidth, alength; cout << ʺEnter a width: ʺ; cin >> awidth; cout << ʺ\nEnter a length: ʺ; cin >> alength; Rectangle Rect2(aWidth, alength); cout << ʺ\nRect2 width: ʺ << Rect2.GetWidth() << endl; cout << ʺRect2 length: ʺ << Rect2.GetLength() << endl; return 0 } 14 7

Constructor overloading/output Rect1 width: 5 Rect1 length: 10 Enter a width: 20 Enter a length: 50 Rect2 width: 20 Rect2 length: 50 15 Αρχικοποίηση Αντικειμένων Οι Constructors περιλαμβάνουν δύο τμήματα: την αρχικοποίηση και το σώμα. Οι μεταβλητές μπορούν να πάρουν τιμή σε οποιοδήποτε από τα δύο τμήματα: Είτε αρχικοποιώντας τους στο τμήμα αρχικοποίησης Είτε δίνοντας τιμή στο σώμα του CAT(): itsage(5), // λίστα αρχικοποίησης itsweight(8) { } // σώμα constructor 16 8

Αρχικοποίηση Αντικειμένων Rectangle::Rectangle(): itswidth(5), itslength(10) {}; Rectangle::Rectangle (int width, int length) itswidth(width), itslength(length) { }; 17 Copy Constructor Ο compiler διαθέτει τον Copy Constructor για τις περιπτώσεις που χρειαζόμαστε αντίγραφο αντικειμένου, πχ πέρασμα σε συνάρτηση Όλοι οι copy constructors παίρνουν ως παράμετρο μια αναφορά σε αντικείμενο της ίδιας κλάσης. CAT(const CAT & thecat); Ο default copy constructor αντιγράφει κάθε δεδομένο του αντικειμένου παραμέτρου στα δεδομένα ενός νέου αντικειμένου. Αυτό μπορεί να είναι πρόβλημα όταν τα δεδομένα είναι δείκτες καθώς θα δείχνουν και οι δύο στην ίδια θέση μνήμης αλλά θα πάψουν να υπάρχουν με την καταστροφή του αντίστοιχου αντικειμένου 18 9

Copy Constructor 19 Copy Constructor Η λύση είναι να δημιουργήσουμε το δικό μας copy constructor που θα δεσμεύσει την απαιτούμενη μνήμη εξ αρχής πριν αντιγράψει τις τιμές σε νέα μνήμη. 20 10

Copy Constructor/1 #include <iostream.h> class CAT { public: CAT(); CAT (const CAT &); ~CAT(); int GetAge() const { return *itsage; } int GetWeight() const { return *itsweight; } void SetAge(int age) { *itsage = age; } private: int *itsage; int *itsweight; }; 21 Copy Constructor/2 CAT::CAT() { itsage = new int; itsweight = new int; *itsage = 5; *itsweight = 9; } CAT::CAT(const CAT & rhs) { itsage = new int; itsweight = new int; *itsage = rhs.getage(); *itsweight = rhs.getweight(); } CAT::~CAT() { delete itsage; itsage = 0; delete itsweight; itsweight = 0; } 22 11

Copy Constructor/3 int main() { CAT frisky; cout << ʺfriskyʹs age: ʺ << frisky.getage() << endl; cout << ʺSetting frisky to 6...\nʺ; frisky.setage(6); cout << ʺCreating boots from frisky\nʺ; CAT boots(frisky); cout << ʺfriskyʹs age: ʺ << frisky.getage() << endl; cout << ʺbootsʹ age: ʺ << boots.getage() << endl; cout << ʺsetting frisky to 7...\nʺ; frisky.setage(7); cout << ʺfriskyʹs age: ʺ << frisky.getage() << endl; cout << ʺbootʹs age: ʺ << boots.getage() << endl; return 0; } 23 Copy Constructor/output friskyʹs age: 5 Setting frisky fik to 6... Creating boots from frisky friskyʹs age: 6 bootsʹ age: 6 setting frisky to 7... friskyʹs age: 7 bootsʹ age: 6 24 12

Counter Output: The value of iis 0 #include <iostream.h> typedef unsigned short USHORT; class Counter { public: Counter(); ~Counter(){} USHORT GetItsVal()const { return itsval; } void SetItsVal(USHORT x) {itsval = x; } private: pi ae USHORT itsval; }; Counter::Counter(): itsval(0) {}; int main() { Counter i; cout << ʺThe value of i is ʺ << i.getitsval() << endl; return 0; } 25 Counter II/1 #include <iostream.h> typedef unsigned short USHORT; class Counter { public: Counter(); ~Counter(){} USHORT GetItsVal()const { return itsval; } void SetItsVal(USHORT x) {itsval = x; } void Increment() { ++itsval; } private: USHORT itsval; }; Counter::Counter(): itsval(0) { }; 26 13

Counter II/2 int main() { Counter i; cout << ʺThe value of i is ʺ << i.getitsval() << endl; i.increment(); cout << ʺThe value of i is ʺ << i.getitsval() << endl; return 0; } The value of i is 0 The value of i is 1 27 Overloading τους προκαθορισμένους τελεστές Μπορούμε να κάνουμε overloading του προκαθορισμένους τελεστές δηλώνοντας συναρτήσεις της μορφής returntype Operator op (parameters) όπου, op ο τελεστής για overloading void operator++ () 28 14

Overloading ++/1 #include <iostream.h> typedef unsigned short USHORT; class Counter { public: Counter(); ~Counter(){} USHORT GetItsVal()const { return itsval; } void SetItsVal(USHORT x) {itsval = x; } void Increment() { ++itsval; } void operator++ () { ++itsval; } private: USHORT itsval; }; Counter::Counter(): itsval(0) {}; 29 Overloading ++/2 int main() { Counter i; cout << ʺThe value of i is ʺ << i.getitsval() << endl; i.increment(); cout << ʺThe value of i is ʺ << i.getitsval() << endl; ++i; cout << ʺThe value of i is ʺ << i.getitsval() << endl; return 0; } The value of i is 0 The value of i is 1 The value of i is 2 30 15