ΗΥ- ΗΥ 150a Programming Recitation 2 Destructor
|
|
- Σιληνός Αγγελόπουλος
- 8 χρόνια πριν
- Προβολές:
Transcript
1 Επαναληπτικό μάθημα 2/2 Class- Object- Constructor - Destructor Ενθυλάκωση-Αφαίρεση Κληρονομικότητα Πολυμορφισμός
2 Aντικειμενοστρεφή προγραμματισμό (objectoriented programming), ή OOP, ονομάζουμε ένα προγραμματιστικό υπόδειγμα το οποίο εμφανίστηκε στα τέλη της δεκαετίας του 1960 και καθιερώθηκε κατά τη δεκαετία του 1990, αντικαθιστώντας σε μεγάλο βαθμό το παραδοσιακό υπόδειγμα του δομημένου προγραμματισμού (πχ. C). Πρόκειται για μία μεθοδολογία ανάπτυξης προγραμμάτων,υποστηριζόμενη από κατάλληλες γλώσσες προγραμματισμού.
3 Τα σχετιζόμενα δεδομένα και των διαδικασίες τους που επενεργούν σε αυτά γίνεται από κοινού, μέσω μίας δομής δεδομένων το αντικείμενο. Κεντρική ιδέα στον αντικειμενοστραφή προγραμματισμό (OOP) είναι η κλάση (class). Mία αυτοτελής και αφαιρετική αναπαράσταση κάποιας κατηγορίας αντικειμένων. Eίτε φυσικών αντικειμένων του πραγματικού κόσμου είτε νοητών εννοιολογικών αντικειμένων, σε ένα περιβάλλον προγραμματισμού.
4 Ένας τύπος δεδομένων, ή αλλιώς το προσχέδιο μίας δομής δεδομένων με δικά της περιεχόμενα, τόσο μεταβλητές όσο και διαδικασίες. Τα περιεχόμενα αυτά δηλώνονται είτε ως δημόσια (public) είτε ως ιδιωτικά (private), με τα ιδιωτικά να μην είναι προσπελάσιμα από κώδικα εκτός της κλάσης. Οι διαδικασίες των κλάσεων συνήθως καλούνται μέθοδοι (methods) και οι μεταβλητές τους γνωρίσματα (attributes) ή πεδία (fields).
5 Ιδανικά να είναι εννοιολογικά αυτοτελής Να περιέχει δηλαδή μόνο πεδία τα οποία περιγράφουν μία κατηγορία αντικειμένων Δημόσιες μεθόδους οι οποίες επενεργούν σε αυτά όταν καλούνται από το εξωτερικό πρόγραμμα, χωρίς να εξαρτώνται από άλλα δεδομένα ή κώδικα εκτός της κλάσης. Επαναχρησιμοποιήσιμη, ένα μαύρο κουτί δυνάμενο να λειτουργήσει χωρίς τροποποιήσεις ως τμήμα διαφορετικών προγραμμάτων
6 Αντικείμενο (object) είναι το στιγμιότυπο μίας κλάσης, ή η δομή δεδομένων (με αποκλειστικά δεσμευμένο χώρο στη μνήμη) βασισμένη στο «καλούπι» που προσφέρει η κλάση. Επομένως μόνο τα αντικείμενα καταλαμβάνουν χώρο στη μνήμη του υπολογιστή. Για παράδειγμα μια κλάση BankAccount, η οποία αναπαριστά έναν τραπεζικό λογαριασμό, και να δηλώσουμε ένα αντικείμενο της με όνομα MyAccount. Το MyAccount θα έχει δεσμεύσει χώρο στη μνήμη με βάση τις μεταβλητές και τις μεθόδους που περιγράφονται στην κλάση.
7 Το MyAccount θα μπορούσε να περιέχει ένα γνώρισμα (attributes), Balance (=υπόλοιπο)) και μία μέθοδος GetBalance (=επίστρεψε το υπόλοιπο). Ακολούθως θα μπορούσαμε να δημιουργήσουμε ακόμα ένα ή περισσότερα αντικείμενα της ίδιας κλάσης τα οποία θα είναι διαφορετικές δομές δεδομένων (διαφορετικοί τραπεζικοί λογαριασμοί στο παράδειγμα). Τα αντικείμενα μίας κλάσης μπορούν να προσπελάσουν τα ιδιωτικά περιεχόμενα άλλων αντικειμένων της ίδιας κλάσης.
8
9 Ενθυλάκωση δεδομένων (data encapsulation) Ή ιδιότητα που προσφέρουν οι κλάσεις να «κρύβουν» τα ιδιωτικά δεδομένα τους από το υπόλοιπο πρόγραμμα και να εξασφαλίζουν πως μόνο μέσω των δημόσιων μεθόδων τους θα μπορούν αυτά να προσπελαστούν. Αυτή η τακτική παρουσιάζει μόνο οφέλη καθώς εξαναγκάζει κάθε εξωτερικό πρόγραμμα να φιλτράρει το χειρισμό που επιθυμεί να κάνει στα πεδία μίας κλάσης μέσω των ελέγχων που μπορούν να περιέχονται στις δημόσιες μεθόδους της κλάσης.
10 Η λειτουργικότητα αυτή λέγεται συνήθως Application Programming Interface API. Για να έχουμε πρόσβαση στα private members παρέχουμε επιπλέον member functions που τα λέμε accessors. Το keyword this είναι ένας pointer στο στιγμιότυπο της κλάσης που μας βοηθάει να προσπελάσουμε members που είναι υποσκιασμένες shadowed από τοπικές μεταβλητές.
11 Constructor <<Get-ers>> for be able to call protected, private members But without changing var. values
12 Αφαίρεση δεδομένων καλείται η ιδιότητα των κλάσεων να αναπαριστούν αφαιρετικά πολύπλοκες οντότητες στο προγραμματιστικό περιβάλλον. Μία κλάση αποτελεί ένα αφαιρετικό μοντέλο κάποιας κατηγορίας αντικειμένων. Επίσης οι κλάσεις προσφέρουν και αφαίρεση ως προς τον υπολογιστή, εφόσον η καθεμία μπορεί να θεωρηθεί ένας μικρός και αυτάρκης υπολογιστής (με δική του κατάσταση, μεθόδους και μεταβλητές).
13 Υπερφόρτωση μεθόδου (method overloading) είναι η κατάσταση κατά την οποία υπάρχουν, στην ίδια ή σε διαφορετικές κλάσεις, μέθοδοι με το ίδιο όνομα και πιθανώς διαφορετικά ορίσματα. Αν πρόκειται για μεθόδους της ίδιας κλάσης διαφοροποιούνται μόνο από τις διαφορές τους στα ορίσματα και στον τύπο επιστροφής. Μπορούμε να κάνουμε overload οποιαδήποτε συνάρτηση. Πρέπει όμως οι overloaded συναρτήσεις να έχουμε διαφορετική υπογραφή και μάλιστα να μη διαφέρουν μόνο στον επιστρεφόμενο τύπο. Στη C++ μπορούν να υπερφορτωθούν όλοι οι τελεστές, εκτός από τους παρακάτω τέσσερις: L..* ::? :
14 class printdata { public: void print(int i) { cout << "Printing int: " << i << endl; } void print(double f) { cout << "Printing float: " << f << endl; } void print(char* c) { cout << "Printing character: " << c << endl; } }; int main(void) { printdata pd; pd.print(5); pd.print( ); pd.print("hello C++"); return 0; }
15
16
17 Κληρονομικότητα ονομάζεται η ιδιότητα των κλάσεων να επεκτείνονται σε νέες κλάσεις, ρητά δηλωμένες ως κληρονόμους (υποκλάσεις ή 'θυγατρικές κλάσεις'), οι οποίες μπορούν να επαναχρησιμοποιήσουν τις μεταβιβάσιμες μεθόδους και ιδιότητες της γονικής τους κλάσης αλλά και να προσθέσουν δικές τους. Στιγμιότυπα των θυγατρικών κλάσεων μπορούν να χρησιμοποιηθούν αντί των γονικών αφού η θυγατρική είναι κατά κάποιον τρόπο μία πιο εξειδικευμένη εκδοχή της γονικής αλλά το αντίστροφο δεν ισχύει.
18 Παράδειγμα κληρονομικότητας είναι μία γονική κλάση Vehicle (=Όχημα) και η υποκλάση της Car. Πολλαπλή κληρονομικότητα είναι η δυνατότητα που προσφέρουν ορισμένες γλώσσες προγραμματισμού μία κλάση να κληρονομεί ταυτόχρονα από περισσότερες από μία γονικές.
19 Inheritance example : (Vehicle-Car):
20 Inheritance example : (Animal-Cat-Dog): class Animal { public: Animal(char* name) : name(name) {} void Walk(void); private: char* name; }; class Cat : public Animal { public: Cat(char* name):animal(name){} void Climb(void); }; class Dog : public Animal { public: Dog(char* name):animal(name ){} void Bark(void); };
21 Τα μέλη μίας κλάσης μπορούν να έχουν ένα από τους παρακάτω χαρακτηρισμούς πρόσβασης: private ή public. ή protected, ο οποίος χρησιμοποιείται αποκλειστικά στην κληρονομικότητα. Ένα protected μέλος είναι ουσιαστικά private εκτός της κλάσης Χ στην οποία ορίζεται, αλλά μπορεί να χρησιμοποιηθεί σε μία κλάση που είναι κληρονόμος της Χ.
22 Η κληρονομικότητα πρέπει να χαρακτηρίζεται με έναν από τους τρεις διαφορετικούς χαρακτηρισμούς (δηλ. public, private, protected). Αυτού του είδους ο χαρακτηρισμός ορίζει τον τρόπο με τον οποίο οι αυθεντικοί χαρακτηρισμοί πρόσβασης των κληρονομημένων μελών τροποποιούνται μέσα στο χώρο της κληρονόμου κλάσης. Αν δεν χαρακτηριστεί, θεωρείται private όταν κληρονομούμε από κλάσεις και public όταν κληρονομούμε από structs.
23 Στον παρακάτω πίνακα βλέπουμε τον χαρακτηρισμό πρόσβασης που έχουν τα μέλη μιας κληρονόμου κλάσης μέσα από την κληρονομούμενη κλάση αναλόγως με τον χαρακτηρισμό που θα έχει η κληρονομικότητα:
24 Class definition body class P { protected: int x, y; }; class C : public P { int R; P p; }; Run-time memory model Bas ecla ss
25 Στην κληρονομικότητα τα derived classes κληρονομούν από το base class όλα τα member data και όλα τα member functions εκτός από: Constructors (όλα τα overloaded versions) Destructor Operator = (όλα τα overloaded versions) Friends Παρόλο που δεν κληρονομούνται οι constructors και ο destructor, o default constructor και destructor πάντα καλούνται όταν δημιουργείται ή καταστρέφεται το derived στιγμιότυπο.
26 Δε μπορούμε να αρχικοποιήσουμε private μεταβλητές μιας base class από τον constructor της derived class γιατί δεν έχουμε πρόσβαση σε αυτή. Χρησιμοποιούμε το συντακτικό αρχικοποίησης για constructors για να καλέσουμε τον constructor του base class class Base { int i; public: Base(int i) : i(i) {} }; class Derived : public Base { int value; public: Derived(int i, int val) : Base(i), value(val) {} Derived(int _i, int val) { i=_i; //error: i is private value = val; } };
27 Constructor δημιουργεί το class object Έχει το ίδιο όνομα με την κλάση Μια κλάση μπορεί να έχει πολλούς overloaded constructors Χρησιμοποιείται ειδικό συντακτικό για την αρχικοποίηση των members Destructor καταστρέφει το object (όταν βγει εκτός scope είτε από delete) Έχει το ίδιο όνομα με την κλάση με επιπλέον το ~ Μια κλάση μπορεί να έχει μόνο ένα destructor και μάλιστα χωρίς ορίσματα Αν δεν οριστεί καθόλου constructor ή destructor, ο compiler δημιουργεί τους default που δεν παίρνουν ορίσματα.
28 int main(void) { Vector* vec1 = new Vector; // default constructor is called Vector vec2(2,4,1); // parametrized constructor is called vec1->add(vec2); // vec1 + vec2 if (vec1->isequal(vec2)) // vec1 == vec2 printf("vec = (%f,%f,%f)\n", vec1->getx(), vec1->gety(), vec1->getz()); delete vec1; // destructor of vec1 object called here return 0; } // destructor of vec2 object called here
29 class X { public: X(void) { printf( X()\n ); } ~X() { printf( ~X()\n ); } }; class Y : public X { public: Y(void) { printf( Y()\n ); } ~Y() { printf( ~Y()\n ); } }; class Z : public Y { public: Z(void) { printf( Z()\n ); } ~Z() { printf( ~Z()\n ); } }; int main (int, char**) { Z z; return 0; }
30 class X { public: X(void) { printf( X()\n ); } ~X() { printf( ~X()\n ); } Εκτυπώνεται κατά }; την εκτέλεση: class Y : public X { X() public: Y(void) { printf( Y()\n ); } Y() ~Y() { printf( ~Y()\n ); } Z() }; ~Z() class Z : public Y { ~Y() public: Z(void) { printf( Z()\n ); } ~X() ~Z() { printf( ~Z()\n ); } }; int main (int, char**) { Z z; return 0; }
31 Σειρά κλήσης Constructor & Destructor: Οι constructors στην ιεραρχία κληρονομικότητας καλούνται από πάνω προς τα κάτω downwards. Οι destructors στην ιεραρχία κληρονομικότητας καλούνται από κάτω προς τα πάνω upwards.
32 Πολυμορφισμός σημαίνει "πολλές μορφές". Αναφέρεται στην ικανότητα ενός αντικειμένου να έχει πολλούς τύπους. Αν έχουμε μια function που αναμένει ένα object Vehicle, μπορούμε να το περάσου με ασφάλεια ένα Car object, επειδή κάθε Car είναι επίσης ένα Vehicle. Θέλουμε να αλλάξουμε (εξειδικεύσουμε) τη συμπεριφορά της base class κάνοντας override τη λειτουργικότητα των μεθόδων της. Οι συναρτήσεις όμως γίνονται linked στατικά κατά το compile και δεν υπάρχει τρόπος για τον pointer b να γνωρίζει at run-time τον τύπο του object στο οποίο δείχνει.
33 Polymorphism example: Derived derived; struct Base { Base base, *b = new Derived; void foo(void) base.foo(); // prints base { printf( base );} derived.foo(); // prints derived }; struct Derived : public b->foo(); Base { void foo(void) {printf( derived );} };
34 Polymorphism example: Derived derived; struct Base { Base base, *b = new Derived; void foo(void) base.foo(); // prints base { printf( base );} derived.foo(); // prints derived }; struct Derived : public b->foo(); Base { void foo(void) {printf( derived );} Problem!!! }; prints base but intended derived
35 Τις συναρτήσεις αυτές τις δηλώνουμε με το keyword virtual: Ο compiler δεν κάνει στατικά link τον κώδικα της συνάρτησης αλλά να παράγει κώδικα που θα αποφασίσει για το ποια συνάρτηση πρέπει να κληθεί κατά το runtime ή late (ή dynamic) binding Οι static member functions δε μπορούν να δηλωθούν ως virtual. Μια συνάρτηση που δηλώνεται virtual σε ένα class είναι πάντα virtual σε όλα τα derived classes.
36 struct Base { virtual void foo(void) { printf( base ); } }; struct Derived : public Base{ void foo(void) { printf( derived ); } }; Derived derived; Base base, *b = new Derived; base.foo(); //prints base derived.foo();//prints derived b->foo(); Solve!!! Prints derived
37 Pure virtual συναρτήσεις λέγονται οι virtual συναρτήσεις που δεν έχουν υλοποίηση. Δηλώνονται ως virtual συναρτήσεις με ένα =0 στο τέλος. Δε μπορούμε να δημιουργήσουμε στιγμιότυπα από κλάσεις που έχουν έστω και μια pure virtual συνάρτηση. Αυτές οι κλάσεις ονομάζονται abstract. Χρησιμοποιούνται για να ορίσουν γενική λειτουργικότητα που θα υλοποιηθεί αργότερα από τα derived classes, αν το derived class δεν υλοποιεί τις pure virtual συναρτήσεις ενός base, τότε είναι και αυτό abstract. Μπορούμε να έχουμε pointers και references σε abstract classes, όχι όμως αντικείμενα Μία abstract κλάση χωρις γνωρίσματα και οι μέθοδοί της είναι abstract και δημόσιες καλείται διασύνδεση (interface).
38 Ενδέχεται να έχουμε δεσμεύσει δυναμικά μνήμη για πολυμορφικά αντικείμενα. Κατά τη διαγραφή τους με delete θέλουμε πάντα να κληθεί ο κατάλληλος (πιο derived) destructor. Για αυτό το λόγο ορίζουμε το destructor της base class virtual. Πάντα όταν σχεδιάζουμε μια κλάση που πιθανό να κληροδοτήσει σε κάποια άλλη ορίζουμε τον destructor της ως virtual. Στο επόμενο παράδειγμα, αν ο destructor της Shape δεν ήταν virtual, κατά το delete shape θα καλούνταν μόνο ο destructor της Base (Shape) και θα είχαμε memory leak αν είχαμε κάνει new ένα Object της Derived κλάσης Circle.
39 struct Base { Base(void) { } virtual ~Base(void) { foo(); } virtual void foo(void) { printf( base ); } }; struct Derived : public Base { Derived(void) { o = new Object; } ~Derived(void){ foo(); delete o;} void foo(void) { printf( derived ); } private: Στο παράδειγμα, αν ο Object* o; destructor της Base δεν ήταν virtual, κατά το }; delete b θα καλούνταν μόνο ο destructor της Base και θα είχαμε memory leak για το Object o της κλάσης Derived Base* b = new Derived; delete b; //prints derived base
40 #include <stdio.h> class Shape { Virtual Destructor public: virtual ~Shape(); virtual void draw() = 0; Pure virtual }; class Circle : public Shape { public: ~Circle(); default Destructor virtual void draw(); }; // void Shape::draw() { // printf("shape::draw\n");} Circle::~Circle() { printf("circle destructor\n"); } void Circle::draw() { printf("circle::draw\n"); } int main() { Shape *shape = new Circle; shape->draw(); delete shape; Shape::~Shape() { printf("shape return 0;} destructor\n"); }
41 Στο παράδειγμα, αν ο destructor της Shape δεν ήταν virtual, κατά το delete shape θα καλούνταν μόνο ο destructor της Base (Shape) και θα είχαμε memory leak αν είχαμε κάνει new ένα Object της Circle. Only inherit from something if you have a virtual destructor! If you don t, you re almost certainly going to have memory leaks. Whether or not the destructor is virtual is a clear indication of whether or not a type is intended to be inherited from. Don t override functions that aren t virtual! It s not illegal, it s just bad practice.
42 Στη C++ επιτρέπεται μια κλάση να κληρονομεί από περισσότερες από μια κλάσεις. Η derived κλάση κληρονομεί τις μεταβλητές και τις μεθόδους από όλες τις base κλάσεις. Πρέπει όμως να διευκρινίζουμε στη derived κλάση ποια μέθοδο χρησιμοποιούμε σε περίπτωση που συμπίπτουν ονόματα από διαφορετικές base κλάσεις Name qualification με τον τελεστή ::
43 class Base1 { public: int i, x; void foo(int x) {} Base1(int i = 0) : i(i) {} }; class Base2 { public: int i, y; void foo(int x) {} Base2(int i = 0) : i(i) {} }; Run-time memory model Base1 στιγμιότυπο Derived στιγμιότυπο int i int i int x int x Base2 στιγμιότυπο int i int i int y int y int j Base1 Base2 class Derived : public Base1, public Base2 { int j; public: Derived(int i1, int i2) : Base1(i1), Base2(i2) {} void function(void) { foo(5); // compile error: ambiguous call to foo i = 3; // compile error: ambiguous access to i Base1::foo(5); // ok, καλείται η foo της Base1 Base2::i = 5; // ok, η ανάθεση γίνεται στο i της Base2 } };
44 Base Derived1 class Animal { public: virtual void eat(); }; class Mammal : public Animal { public: virtual void walk(); Derived2 }; Animal Mammal only Animal WingedAnimal only Bat only Bat instance class WingedAnimal : public Animal { public: virtual void fly(); }; Join Run-time memory model Join στιγμιότυπο Base Base // A bat is a winged mammal class Bat : public Mammal,public WingedAnimal{}; Derived1 Derived2 Bat *bat = new Bat; bat->eat(); //error, ambiguous call bat->mammal::eat(); //ok, calls Mammal::eat Animal *a=(animal *)bat; //error, ambiguous cast
45 Base virtual virtual Derived1 Derived2 Join Run-time memory model Join στιγμιότυπο Base Derived1 only class Animal { public: virtual void eat(); }; class Mammal : public virtual Animal { public: virtual void walk(); }; class WingedAnimal : public virtual Animal { public: virtual void fly(); }; // A bat is still a winged mammal class Bat : public Mammal,public WingedAnimal{}; Bat *bat = new Bat; bat->eat(); //ok, single animal sub instance bat->mammal::eat(); //ok, but unnecessary Animal *a=(animal *)bat; //ok, inherited once Derived2 only Join only
46 Το diamond inheritance προκύπτει επειδή κληρονομούμε δύο φορές από την ίδια κλάση. Για να εξασφαλίσουμε ότι όσες φορές κι αν κληρονομήσουμε από κάποιο base class θα έχουμε πάντα μόνο ένα κοινό base instance, χρησιμοποιούμε την virtual κληρονομικότητα. Ενδέχεται να κληρονομούμε από κάποιο base class και με virtual τρόπο αλλά και κανονικά. Σε αυτή την περίπτωση, έχουμε ένα κοινό base instance από τη virtual κληρονομικότητα και ένα κανονικό για κάθε επιπλέον κανονική κληρονομικότητα.
47 Upcasting and downcasting are an important part of C++. Upcasting and downcasting gives a possibility to build complicated programs with a simple syntax. It can be achieved by using Polymorphism. C++ allows that a derived class pointer (or reference) to be treated as base class pointer. This is upcasting. Downcasting is an opposite process, which consists in converting base class pointer (or reference) to derived class pointer. Upcasting and downcasting should not be understood as a simple casting of different data types. It can lead to a great confusion.
48 Both upcasting and downcasting do not change object by itself. When you use upcasting or downcasting you just "label" an object in different ways. Downcasting is not safe as upcasting (in single inheritance). A derived class object can be always treated as base class (in single inheritance) object, the opposite is not right. Use of derived type instead of a base type: Derived *d = new Derived(); Base *b = new Derived(); dynamic_cast: Performs a check, at runtime, that the cast is valid. If it isn t, returns nullptr. The check doesn t work in all situations (sidecasts) Only works on polymorphic types (types with virtual functions).
49 static_cast: No runtime check Bad cast = undefined behavior Going backwards: Base *b = new Derived(); Derived *d1 = dynamic_cast<derived *>(b); Derived *d2 = static_cast<derived *>(b); Side note: All of these are legal int a = (int)b; int a = int(b); int a = static_cast<int>(b);
50 Accessing Overridden Functions class Base { virtual void foo(); }; class Derived : public Base { void foo() override; }; Derived *d = new Derived(); d->base::foo();
51 Question: Create a class Person and two derived classes Employee, and Student, inherited from class Person. Now create a class Manager which is derived from two base classes Employee and Student. Show the use of the virtual base class.
52 #include<iostream> using namespace std; class Person{ private: char name[20]; char emp_id[10]; class Employee :virtual public Person { private: char emp_id[10]; public: void get_data(){ cout<<"enter Employee ID: "; cin>>emp_id; } void show_data(){ cout<<"\nemplyee ID: "<<emp_id;} }; public: void get_data() {cout<<"enter Employee ID: "; cin>>emp_id; Popular Posts} void show_data() {cout<<"\nemplyee ID: "<<emp_id;} };
53 The keyword 'virtual' makes only one copy of ger_per_data() and show_per_data(). Which avoids ambiguity. If we do not supply keyword 'virtual' the compiler cannot decides which class' get_per_data() and show_per_data() to be called. Because they are the member functions of classes Employee, Student, and Manager as well.
54 class Student : virtual public Person{ private: char roll_no[10]; public: void get_data() {cout<<"enter Roll No: "; cin>>roll_no;} void show_data() {cout<<"\nroll No: "<<roll_no;} }; class Manager: public Employee, public Student { private: unsigned int salary; public: void get_data() { Employee::get_data(); /**calls the get_data() of Employee**/ Student::get_data(); cout<<"enter Salary: "; cin>>salary;} void show_data(){ Employee::show_data(); Student::show_data(); cout<<"\nsalary: "<<salary;} };
55 int main() { Manager m; cout<<"enter data for manager: "; m.get_per_data(); /**calls single copy of get_per_data()**/ m.get_data(); cout<<"\nthe data on manager is: "; m.show_per_data(); m.show_data(); return 0; }
56 Question: Create a polymorphic class Vehicle and create other derived classes Bus, Car from Vehicle. With this program illustrate RTTI (RunTime Type Information) by the use of dynamic_cast and typeid operators. int main(){ Vehicle *pveh, veh; #include<iostream> Bus *pbs;// declare pointer to bus to use #include<typeinfo> it in dynamic_cast. using namespace std; Bus bs; //static class instance (object) to class Vehicle{ //use it as reference to initialize pveh public: virtual void show(){} and then dynamic_cast to pbs, is on the }; stack and not in heap when using new class Bus: public Vehicle{}; Car *pcr; Car cr;//class instance (object) class Car: public Vehicle{}; pveh = &bs;// reference pbs=dynamic_cast<bus*>(pveh); if(pbs) //check if cast is ok cout<<"the Cast to derived pointer pbs is Sucessful"<<endl; else cout<<"the Cast to derived pointer pbs is Failed"<<endl;
57 Here the cast from base class Vehicle pointer pveh to derived class Bus pointer pbs works well because pveh is pointing to derived class Bus' Object.
58 General examples 1A.In this example you will implement a class representing an array of Points(PointArray). It will allow dynamically resizing the array, and it will track its own length so that if you Were to pass it to a function, you would not need to pass its length separately. Create the class with two private members, a pointer to the start of an array of Points and an int that stores the size (length)of the array. This is geometry.h example header file
59 General examples 1B.Now Implement the default constructor(a constructor with no arguments) with the following signature. It should create an array with size0. Implement a constructor that takes a Pointarray called points and an int called size as its arguments. It should initialize a PointArray with the specified size, copying the values from points. You will need to dynamically allocate the PointArray s internal array to the specified size. PointArray::PointArray(const Point points[], const int size) Finally, implement a constructor that creates a copy of a given PointArray (a copy constructor). PointArray::PointArray(const PointArray& pv) (Hint: Make sure that the two PointArrays do not end up using the same memory for their internal arrays. Also make sure that the contents of the original array are copied, as well.) Define a destructor that deletes the internal array of the PointArray. PointArray::~PointArray()
60 General examples
61 General examples
62 General examples 1.C Since we will allow modifications to our array, you ll find that the internal array grows and shrinks quite often. A simple (though very inefficient) way to deal with this without repetitively writing similar code is to write a member function PointArray::resize(int n) that allocates a new array of size n, copies the first min (previous array size, n) existing elements into it, and deallocates the old array. If doing so has increased the size, it s fine for resize to leave the new spaces uninitialized; whatever member function calls it will be responsible for filling those spaces in. Then every time the array size changes at all (including clear), you can call this function. In some cases, after you call this function, you will have to subsequently shift some of the contents of the array right or left in order to make room for a new value or get rid of an old one. This is of course inefficient; for the purposes of this exercise, however, we won t be worrying about efficiency. If you wanted to do this the right way, you d remember both how long your array is and how much of it is filled, and only reallocate when you reach your current limit or when how much is filled dips below some threshhold. Add the PointArray::resize(int n) function as specified above to your PointArray class. Give it an appropriate access modifier, keeping in mind that this is meant for use only by internal functions; the public interface is specified below.
63 General examples Member Functions Implement public functions to perform the following operations: Add a Point to the end of the array void PointArray::pushback(const Point &p) Insert a Point at some arbitrary position (subscript) of the array, shifting the elements past position to the right void PointArray::insert(const int position, const Point &p) Remove the Point at some arbitrary position (subscript) of the array, shifting the remaining elements to the left void PointArray::remove(const int pos) Get the size of the array const int PointArray::getSize() const Remove everything from the array and sets its size to 0 void PointArray::clear()
64 General examples Get a pointer to the element at some arbitrary position in the array, where positions start at 0 as with arrays Point *PointArray::get(const int position) const Point *PointArray::get(const int position) const If get is called with an index larger than the array size, there is no Point you can return a pointer to, so your function should return a null pointer. Be sure your member functions all behave correctly in the case where you have a 0-length array (i.e., when your PointArray contains no points, such as after the default constructor is called). This part continues the previous 1A, 1B code, and parts 1B and 1C form the geometry.cpp file.
65 General examples
66 General examples
67 General examples
68 General examples
69 General examples Why do we need const and non-const versions of get? (Think about what would happen if we only had one or the other, in particular what would happen if we had a const PointArray object.)
70 General examples
71 General examples
72 General examples
73 General examples
74 General examples
75 General examples
76 General examples
77 General examples
78 General examples
79 General examples
80 General examples
81 General examples
82 General examples
83 General examples
84 General examples
85 General examples
86 General examples
87 General examples
88 General examples
89 General examples
90 References 1)HY352,Τεχνολογία Λογισμικού 2)Examples Inheritance 3) Templates 4)C107 Programming Paradigms. 5)Advanced Inheritance and Virtual Methods. f 6)Introduction to C++ MIT OPEN COURSES. ce/6-096-introduction-to-c-january-iap-2011/ 7)CS106L, more complete exploration of the C++ language. 8)GotW #5 Solution: Overriding Virtual Functions, Sutter s Mill. 9) Nice C++ Links
Struct : public by default but Class: private by default. ClassPoint { Struct Point { Public: Double x; Double x; Double y; Double y;
Classes: In C++, classes are very much like structs, except that classes provide much more power and flexibility. In fact, the following struct and class are effectively identical. Struct : public by default
Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?
Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
(Διαφάνειες Νίκου Βιδάκη)
(Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό
Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Πολυμορφισμός ΔΙΔΑΣΚΟΝΤΕΣ:Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής
The Simply Typed Lambda Calculus
Type Inference Instead of writing type annotations, can we use an algorithm to infer what the type annotations should be? That depends on the type system. For simple type systems the answer is yes, and
2 Composition. Invertible Mappings
Arkansas Tech University MATH 4033: Elementary Modern Algebra Dr. Marcel B. Finan Composition. Invertible Mappings In this section we discuss two procedures for creating new mappings from old ones, namely,
Σύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))
3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β
3.4 SUM AND DIFFERENCE FORMULAS Page Theorem cos(αβ cos α cos β -sin α cos(α-β cos α cos β sin α NOTE: cos(αβ cos α cos β cos(α-β cos α -cos β Proof of cos(α-β cos α cos β sin α Let s use a unit circle
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial
ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial Introduction Το Javadoc είναι ένα εργαλείο που παράγει αρχεία html (παρόμοιο με τις σελίδες στη διεύθυνση http://docs.oracle.com/javase/8/docs/api/index.html) από τα σχόλια
Σύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
Section 8.3 Trigonometric Equations
99 Section 8. Trigonometric Equations Objective 1: Solve Equations Involving One Trigonometric Function. In this section and the next, we will exple how to solving equations involving trigonometric functions.
EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)
EPL 603 TOPICS IN SOFTWARE ENGINEERING Lab 5: Component Adaptation Environment (COPE) Performing Static Analysis 1 Class Name: The fully qualified name of the specific class Type: The type of the class
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java
Συστήματα Διαχείρισης Βάσεων Δεδομένων
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Συστήματα Διαχείρισης Βάσεων Δεδομένων Φροντιστήριο 9: Transactions - part 1 Δημήτρης Πλεξουσάκης Τμήμα Επιστήμης Υπολογιστών Tutorial on Undo, Redo and Undo/Redo
Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:
Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects
Δυναμική μνήμη με πίνακες και λίστες
Δυναμική μνήμη με πίνακες και λίστες Ατζέντα ονομάτων Οι πίνακες βοηθάνε στην εύκολη προσπέλαση, στην σειριοποίηση των δεδομένων για αποθήκευση ή μετάδοση. Απαιτούν ωστόσο είτε προκαταβολική δέσμευση μνήμης
Κλάσεις και αντικείμενα #include <iostream.h<
Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void
derivation of the Laplacian from rectangular to spherical coordinates
derivation of the Laplacian from rectangular to spherical coordinates swapnizzle 03-03- :5:43 We begin by recognizing the familiar conversion from rectangular to spherical coordinates (note that φ is used
ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.
Homework 3 Solutions
Homework 3 Solutions Igor Yanovsky (Math 151A TA) Problem 1: Compute the absolute error and relative error in approximations of p by p. (Use calculator!) a) p π, p 22/7; b) p π, p 3.141. Solution: For
Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Concrete Mathematics Exercises from 30 September 2016
Concrete Mathematics Exercises from 30 September 2016 Silvio Capobianco Exercise 1.7 Let H(n) = J(n + 1) J(n). Equation (1.8) tells us that H(2n) = 2, and H(2n+1) = J(2n+2) J(2n+1) = (2J(n+1) 1) (2J(n)+1)
Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1
Lab 1: C/C++ Pointers and time.h Panayiotis Charalambous 1 Send email to totis@cs.ucy.ac.cy Subject: EPL231-Registration Body: Surname Firstname ID Group A or B? Panayiotis Charalambous 2 Code Guidelines:
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
EE512: Error Control Coding
EE512: Error Control Coding Solution for Assignment on Finite Fields February 16, 2007 1. (a) Addition and Multiplication tables for GF (5) and GF (7) are shown in Tables 1 and 2. + 0 1 2 3 4 0 0 1 2 3
Section 9.2 Polar Equations and Graphs
180 Section 9. Polar Equations and Graphs In this section, we will be graphing polar equations on a polar grid. In the first few examples, we will write the polar equation in rectangular form to help identify
ΗΥ150a Φροντιστήριο 4 08/12/2017
ΗΥ150a Φροντιστήριο 4 08/12/2017 Outline Classes Member Functions Constructor Overloading Access specifiers Encapsulation Inheritance Polymorphism Vectors 1 Classes Classes in C++ are like structs, except
Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1
Lab 1: C/C++ Pointers and time.h Panayiotis Charalambous 1 Send email to totis@cs.ucy.ac.cy Subject: EPL231-Registration Body: Surname Firstname ID Group A or B? Panayiotis Charalambous 2 Code Guidelines:
HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:
HOMEWORK 4 Problem a For the fast loading case, we want to derive the relationship between P zz and λ z. We know that the nominal stress is expressed as: P zz = ψ λ z where λ z = λ λ z. Therefore, applying
Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods
(Object Oriented Programming) Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Είδη καλουπωμάτων Μετατροπές και έλεγχοι τύπου Τελευταία ενημέρωση: Οκτώβριος 2013 Εισαγωγή - 2 Όπως και στη Java, στη C++
HY150a Φροντιστήριο 3 24/11/2017
HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Επέκταση κλάσεων στη C++ Τροποποίηση μεθόδων (method overriding) Κληρονομικότητα και κατασκευαστές, καταστροφείς,
ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++
Υπερφόρτωση, keywords CONST, STATIC, FRIEND ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Υπερφόρτωση Συναρτήσεων Τελεστών CONST αντικείμενα, μεταβλητές και συναρτήσεις
Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)
Phys460.nb 81 ψ n (t) is still the (same) eigenstate of H But for tdependent H. The answer is NO. 5.5.5. Solution for the tdependent Schrodinger s equation If we assume that at time t 0, the electron starts
Section 7.6 Double and Half Angle Formulas
09 Section 7. Double and Half Angle Fmulas To derive the double-angles fmulas, we will use the sum of two angles fmulas that we developed in the last section. We will let α θ and β θ: cos(θ) cos(θ + θ)
Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012
Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών ΗΥ-252 Αντικειµενοστρεφής Προγραµµατισµός Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012 Θέμα 1 Θέμα 2 Θέμα 3 Θέμα 4 Θέμα
(C) 2010 Pearson Education, Inc. All rights reserved.
Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.
Instruction Execution Times
1 C Execution Times InThisAppendix... Introduction DL330 Execution Times DL330P Execution Times DL340 Execution Times C-2 Execution Times Introduction Data Registers This appendix contains several tables
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 3 Φεβρουαρίου 2013 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.155) Τι είναι το αντικείμενο και ποια τα χαρακτηριστικά του; Περιγράψτε το
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί
Διάλεξη 5: Δείκτες και Συναρτήσεις
Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο
Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής
Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο μια ακολουθία S από n (n 40) ακέραιους αριθμούς και επιστρέφει ως έξοδο δύο ακολουθίες από θετικούς ακέραιους
Potential Dividers. 46 minutes. 46 marks. Page 1 of 11
Potential Dividers 46 minutes 46 marks Page 1 of 11 Q1. In the circuit shown in the figure below, the battery, of negligible internal resistance, has an emf of 30 V. The pd across the lamp is 6.0 V and
Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016
Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Dynamic types, Lambda calculus machines Apr 21 22, 2016 1 Dynamic types and contracts (a) To make sure you understand the
Εργαστήριο 9. Styling with Javascript
Εργαστήριο 9 Styling with Javascript Pimp my Text with Javascript Today you'll write a page where the user can type text into a box, and by clicking on UI controls, the user can "pimp out" the text by
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Όλοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι του 10000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Αν κάπου κάνετε κάποιες υποθέσεις
Μηχανική Μάθηση Hypothesis Testing
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Μηχανική Μάθηση Hypothesis Testing Γιώργος Μπορμπουδάκης Τμήμα Επιστήμης Υπολογιστών Procedure 1. Form the null (H 0 ) and alternative (H 1 ) hypothesis 2. Consider
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)
ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε βάση
Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)
1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 9η 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 30/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Συλλογή απορριμμάτων Συλλογή απορριμμάτων (Garbage
ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης
ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός
CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS
CHAPTER 5 SOLVING EQUATIONS BY ITERATIVE METHODS EXERCISE 104 Page 8 1. Find the positive root of the equation x + 3x 5 = 0, correct to 3 significant figures, using the method of bisection. Let f(x) =
8. Μέθοδοι (Methods)
8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα είναι μικρότεροι το 1000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Διάρκεια: 3,5 ώρες Καλή
12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string
12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string Aλφαριθµητικά της C int main() const int max=80; char str[max); //κάθε char δεσµεύει
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2
Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
Approximation of distance between locations on earth given by latitude and longitude
Approximation of distance between locations on earth given by latitude and longitude Jan Behrens 2012-12-31 In this paper we shall provide a method to approximate distances between two points on earth
Αναφορές, είκτες και Αλφαριθμητικά
Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών
Ειδικά Θέματα Προγραμματισμού
Ειδικά Θέματα Προγραμματισμού Ενότητα 2: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης
Every set of first-order formulas is equivalent to an independent set
Every set of first-order formulas is equivalent to an independent set May 6, 2008 Abstract A set of first-order formulas, whatever the cardinality of the set of symbols, is equivalent to an independent
Κλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
ANSWERSHEET (TOPIC = DIFFERENTIAL CALCULUS) COLLECTION #2. h 0 h h 0 h h 0 ( ) g k = g 0 + g 1 + g g 2009 =?
Teko Classes IITJEE/AIEEE Maths by SUHAAG SIR, Bhopal, Ph (0755) 3 00 000 www.tekoclasses.com ANSWERSHEET (TOPIC DIFFERENTIAL CALCULUS) COLLECTION # Question Type A.Single Correct Type Q. (A) Sol least
Block Ciphers Modes. Ramki Thurimella
Block Ciphers Modes Ramki Thurimella Only Encryption I.e. messages could be modified Should not assume that nonsensical messages do no harm Always must be combined with authentication 2 Padding Must be
Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook
Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook Βήμα 1: Step 1: Βρείτε το βιβλίο που θα θέλατε να αγοράσετε και πατήστε Add to Cart, για να το προσθέσετε στο καλάθι σας. Αυτόματα θα
C.S. 430 Assignment 6, Sample Solutions
C.S. 430 Assignment 6, Sample Solutions Paul Liu November 15, 2007 Note that these are sample solutions only; in many cases there were many acceptable answers. 1 Reynolds Problem 10.1 1.1 Normal-order
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
4.6 Autoregressive Moving Average Model ARMA(1,1)
84 CHAPTER 4. STATIONARY TS MODELS 4.6 Autoregressive Moving Average Model ARMA(,) This section is an introduction to a wide class of models ARMA(p,q) which we will consider in more detail later in this
ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Partial Differential Equations in Biology The boundary element method. March 26, 2013
The boundary element method March 26, 203 Introduction and notation The problem: u = f in D R d u = ϕ in Γ D u n = g on Γ N, where D = Γ D Γ N, Γ D Γ N = (possibly, Γ D = [Neumann problem] or Γ N = [Dirichlet
Αντικειμενοστραφής Προγραμματισμός
Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση
Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Πίνακες Αντικειμένων Όπως στην C μπορούμε να έχουμε πίνακες από
LESSON 14 (ΜΑΘΗΜΑ ΔΕΚΑΤΕΣΣΕΡΑ) REF : 202/057/34-ADV. 18 February 2014
LESSON 14 (ΜΑΘΗΜΑ ΔΕΚΑΤΕΣΣΕΡΑ) REF : 202/057/34-ADV 18 February 2014 Slowly/quietly Clear/clearly Clean Quickly/quick/fast Hurry (in a hurry) Driver Attention/caution/notice/care Dance Σιγά Καθαρά Καθαρός/η/ο
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Διαφορές Java και C++ ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΙΑΦΟΡΕΣ JAVA C++ Η
The challenges of non-stable predicates
The challenges of non-stable predicates Consider a non-stable predicate Φ encoding, say, a safety property. We want to determine whether Φ holds for our program. The challenges of non-stable predicates
17TimeThis.h function returns reference pointer to same object { return *this; }
Προαπαιτούµενη Κάθε οµάδα θα πρέπει να εµπλουτίσει το ίδιο πρόγραµµα, που έκανε την προηγούµενη φορά, προσθέτοντας στην κλάση του έναν ή περισσότερους υπερφορτωµένους τελεστές (όπως , ++, +,-,+=..)
Right Rear Door. Let's now finish the door hinge saga with the right rear door
Right Rear Door Let's now finish the door hinge saga with the right rear door You may have been already guessed my steps, so there is not much to describe in detail. Old upper one file:///c /Documents
Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6
Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:
department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι
She selects the option. Jenny starts with the al listing. This has employees listed within She drills down through the employee. The inferred ER sttricture relates this to the redcords in the databasee
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
6.1. Dirac Equation. Hamiltonian. Dirac Eq.
6.1. Dirac Equation Ref: M.Kaku, Quantum Field Theory, Oxford Univ Press (1993) η μν = η μν = diag(1, -1, -1, -1) p 0 = p 0 p = p i = -p i p μ p μ = p 0 p 0 + p i p i = E c 2 - p 2 = (m c) 2 H = c p 2
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ηµιουργία και χειρισµός LIFO λιστών µεταβλητού µήκους µε στοιχεία ακεραίους αριθµούς. Γενίκευση για χειρισµό λιστών πραγµατικών
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Κλάσεις ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Τάξεις
Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13
Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις
Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά
Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object
PARTIAL NOTES for 6.1 Trigonometric Identities
PARTIAL NOTES for 6.1 Trigonometric Identities tanθ = sinθ cosθ cotθ = cosθ sinθ BASIC IDENTITIES cscθ = 1 sinθ secθ = 1 cosθ cotθ = 1 tanθ PYTHAGOREAN IDENTITIES sin θ + cos θ =1 tan θ +1= sec θ 1 + cot
Congruence Classes of Invertible Matrices of Order 3 over F 2
International Journal of Algebra, Vol. 8, 24, no. 5, 239-246 HIKARI Ltd, www.m-hikari.com http://dx.doi.org/.2988/ija.24.422 Congruence Classes of Invertible Matrices of Order 3 over F 2 Ligong An and
How to register an account with the Hellenic Community of Sheffield.
How to register an account with the Hellenic Community of Sheffield. (1) EN: Go to address GR: Πηγαίνετε στη διεύθυνση: http://www.helleniccommunityofsheffield.com (2) EN: At the bottom of the page, click
Πώς μπορεί κανείς να έχει έναν διερμηνέα κατά την επίσκεψή του στον Οικογενειακό του Γιατρό στο Ίσλινγκτον Getting an interpreter when you visit your
Πώς μπορεί κανείς να έχει έναν διερμηνέα κατά την επίσκεψή του στον Οικογενειακό του Γιατρό στο Ίσλινγκτον Getting an interpreter when you visit your GP practice in Islington Σε όλα τα Ιατρεία Οικογενειακού