Κλάσεις ΚΛΑΣΕΙΣ. Γεώργιος Παπαϊωάννου ( )
|
|
- Ακακιος Βυζάντιος
- 7 χρόνια πριν
- Προβολές:
Transcript
1 ΚΛΑΣΕΙΣ Γεώργιος Παπαϊωάννου ( )
2 Περιγραφή: Οι κλάσεις στη C++ Δήλωση και ορισμός μεθόδων Προσδιοριστές πρόσβασης: δημόσια, ιδιωτικά και προστατευμένα μέλη Αρχεία δήλωσης και ορισμού κλάσεων και μεθόδων Κατασκευαστές Καταστροφείς Στατικές Μέθοδοι Τελευταία ενημέρωση: Φεβρουάριος 2016 Εισαγωγή - 2
3 Στη C++ (όχι στη C) έχουμε όπως και στη Java την έννοια της κλάσης (ή τάξης class). Εννοιολογική, ιεραρχική οργάνωση των δεδομένων μας και των πράξεων πάνω σε αυτά Η δήλωση μιας απλής κλάσης, χωρίς κληρονομικότητα έχει τη μορφή: class [Όνομα κλάσης] { ; public/protected/private: [Τύπος πεδίου] [Όνομα πεδίου]; public/protected/private: [static][τύπος επιστροφής] [Όνομα μεθόδου](ορίσματα μεθόδου); 3
4 class Person { public: string name; unsigned short year; unsigned phone; ; // Προσοχή, χρειάζεται «;». Hint: Ο προσδιοριστής πρόσβασης (access specifier) στη C++ δε χρειάζεται να επαναλαμβάνεται για κάθε πεδίο ή μέθοδο (εδώ το public ισχύει για όλα τα πεδία που ακολουθούν) int main() { Person p1, p2; p1.name = "Γιάννης"; p2.name = "Μαρία"; p1.year = 1968; p2.year = 1970; p1.phone = ; p2.phone = ; cout << p1.name << ": " << p1.year << ", " << p1.phone << endl << p2.name << ": " << p2.year << ", " << p2.phone << endl; 4
5 Η δήλωση των μεθόδων μιας κλάσης γίνεται πάντα μέσα στο σώμα της Ο ορισμός (υλοποίηση) των μεθόδων μπορεί να γίνει τόσο μέσα στο σώμα της κλάσης, όσο και έξω από αυτή 5
6 class Person { public: ; string name; unsigned short year; unsigned phone; void greeting() { cout << "Το όνομά μου είναι " << name << endl; void tellage(); void Person::tellAge() { cout << "Είμαι " << year; cout << year==1? "χρόνου": "χρονών" << endl; Υλοποίηση μεθόδου εντός κλάσης. Συνήθως το κάνουμε μόνο για πολύ μικρές μεθόδους. Υλοποίηση μεθόδου εκτός κλάσης. Χρειάζεται το όνομα της κλάσης ακολουθούμενο από :: πριν το όνομα της μεθόδου για να προσδιορίζει σε ποια κλάση ανήκει η συνάρτηση 6
7 Είναι καλή πρακτική να κρατάμε τις υλοποιήσεις των μεθόδων χωριστά από τις δηλώσεις (σε αρχεία.cpp και.h) αντίστοιχα, διότι: Αν κρατάμε την υλοποίηση μέσα στο αρχείο τη δήλωσης της κλάσης, κάθε φορά που θα αλλάζουμε τον κώδικα μιας μεθόδου (αλλά όχι την υπογραφή της) θα επηρεάζονται όλα τα αρχεία που την κάνουν include και θα πρέπει να ξαναμεταγλωττιστούν. Σε αντίθετη περίπτωση, όχι. Με αυτό τον τρόπο, έχουμε πλήρη διαχωρισμό της δήλωσης (υπογραφής/interface) μιας κλάσης και της υλοποίησής της Μπορούμε να έχουμε πιο εύκολα και ευανάγνωστα διαφορετικές υλοποιήσεις μεθόδων στο/στα cpp αρχεία είτε κάνοντας επιλεκτική μεταγλώττιση άλλων cpp αρχείων για το ίδιο header είτε μέσα στο ίδιο cpp αρχείο με #ifdef/#else/#endif δηλώσεις 7
8 Ισχύει ο προσδιορισμός προσβασιμότητας σε μέλη όπως και στη Java Δεν υπάρχει η έννοια του «package protected» μέλους αλλά Υπάρχει η έννοια της «φίλιας» κλάσης και μεθόδου (friend) που παρέχει μεγαλύτερη ευελιξία (θα τα δούμε στη συνέχεια) Δημόσια (public): Πρόσβαση από όλους, εντός κι εκτός της κλάσης Ιδιωτικά (private): Πρόσβαση μόνο από άλλα μέλη της ίδιας κλάσης Προστατευμένα (protected): Πρόσβαση από μέλη της ίδιας κλάσης ή των απογόνων της (βλ. κληρονομικότητα) 8
9 Είναι καλή πρακτική να «κλείνουμε» την πρόσβαση στα εσωτερικά δεδομένα της κλάσης: Κάνουμε public ΜΟΝΟ μεθόδους που χρειάζεται ο προγραμματιστής για να αλληλεπιδράσει με την κλάση (*), ποτέ πεδία Δηλώνουμε και υλοποιούμε accessor / modifier (get/set) μεθόδους για να διαβάσουμε και αλλάξουμε ΜΟΝΟ όσα πεδία χρειάζεται Πολλά πεδία μιας κλάσης αφορούν μόνο την εσωτερική της λειτουργία. Γι αυτά δεν επιτρέπουμε καθόλου την πρόσβαση εκτός κλάσης Κατά το σχεδιασμό μιας κλάσης, σκεφτόμαστε πρώτα ποια πεδία μας θα είναι αποκλειστικά δεδομένα της κλάσης αυτής (private) ή απαιτούνται από απογόνους για τη λειτουργία τους (protected) (*) Εκτός κι αν μια κλάση είναι τετριμμένη και έχει μόνο λίγα, απλά πεδία που δε χρειάζονται έλεγχο τιμών κατά τις αναθέσεις και χρήση αυτών 9
10 class Person { private: // Μόνο οι μέθοδοι της Person έχουν πρόσβαση σε αυτά: string name; unsigned short year; void test(); public: // Σε αυτά έχουν πρόσβαση όλοι: void setdata(const string& n, unsigned short y); void print(); ; void Person::setData(const string& n, unsigned short y) { name = n; // ΟΚ. Οι μέθοδοι της Person έχουν πρόσβαση year = y; // στις ιδιωτικές μεταβλητές της Person. void Person:: print() { cout << name << ": " << year << endl; test(); // ΟΚ. Οι μέθοδοι της Person έχουν πρόσβαση στις // ιδιωτικές μεθόδους της Person. 10
11 void Person::test() { cout << "δοκιμή" << endl; int main() { Person p1, p2; p1.name = "Γιάννης"; // Λάθος. Το name είναι ιδιωτικό μέλος. p1.set("γιάννης", 1968); // ΟΚ. Καλώ δημόσιες μεθόδους p2.set("μαρία", 1970); // της Person. p1.print(); // Τυπώνει «Γιάννης: 1968 δοκιμή». p2.print(); // Τυπώνει «Μαρία: 1970 δοκιμή». cout << p1.name; // Λάθος. Το name είναι ιδιωτικό μέλος. p1.test(); // Λάθος. Η test() είναι ιδιωτικό μέλος. 11
12 Η ελεγχόμενη πρόσβαση και ανάθεση τιμών σε πεδία μέσω ενός ρεπερτορίου public μεθόδων και μόνο: Μας επιτρέπει να κρατάμε τα δεδομένα μας συνεπή, ειδικά αν κάποια πεδία της κλάσης εξαρτώνται από άλλα Κάνει μονοσήμαντη και ευκολότερη τη σωστή δέσμευση/αποδεύσμευση μνήμης και μας προφυλάσσει από πρόσβαση σε μη αρχικοποιημένη μνήμη Καθιστά δυνατό τον έλεγχο τιμών και τη διόρθωση παραμέτρων κατά το πέρασμά τους (range/type checking) Κρύβει στο χρήστη της κλάσης την εσωτερική υλοποίηση των δομών της και μας επιτρέπει απρόσκοπτη αλλαγή του κώδικά της, χωρίς να επηρεάζεται η σχέση της κλάσης με τον υπόλοιπο κώδικα 12
13 class Vector { public: float x, y; inline float length() { return sqrt(x*x+y*y); ; int main() { Vector v1, v2; v1.x = 1.f; v1.y = 3.f; v2.x = -2.f; v2.y = 5.f; Και οι μέθοδοι, όπως και οι συναρτήσεις μπορούν να είναι inline. // ακριβή πράξη if (v1.length()>0.0f) // ο υπολογισμός καλείται cout << v2.length() / v1.length(); // πολλές φορές για τα ίδια // δεδομένα σπατάλη // ας ψάξουμε για μια διαφορετική υλοποίηση 13
14 class Vector { private: float m_length; public: float x, y; inline void updatelength() { m_length = sqrt(x*x+y*y); inline float length() { return m_length; ; int main() { Vector v1, v2; v1.x = 0.f; v1.y = 3.f; v2.x = -2.f; v2.y = 5.f; v1.updatelength(); v2.updatelength(); // α) απαιτείται να ενημερώσουμε // μόνοι μας τα αντικείμενα! v1.y = 0.0f; // β) πλέον το v1.length δεν είναι if (v1.length()>0.0f) // σωστό! cout << v2.length() / v1.length(); // ας ψάξουμε για μια διαφορετική υλοποίηση 14
15 class Vector { private: float m_x, m_y; float m_length; inline void updatelength() { m_length = sqrt( m_x*m_x + m_y*m_y ); public: void setcoordinates(float x, float y); inline float getx() {return m_x; inline float gety() {return m_y; inline float length() { return length; ; void Vector::setCoordinates(float x, float y) { if (m_x==x && m_y==y) // Έλεγχος παραμέτρων return; // lazy evaluation. Ενημέρωση μόνο αν αλλάξει κάτι m_x = x; m_y = y; updatelength(); // πλέον γίνεται αυτόματα ενημέρωση των // συσχετισμένων πεδίων 15
16 int main() { Vector v1, v2; v1.setcoordinates(0, 3); v2.setcoordinates(-2, 5); v1.setcoordinates(0,0); // ή προσθέτουμε και μια setx(), set(y) για // ευκολία if (v1.length()>0.0f) // πλέον ελέγχεται ορθά και cout << v2.length() / v1.length(); // δεν εκτελείται 16
17 class Text { private: int num_lines; char * text_buffer[80]; public: void addline(const char * line); void addline(const string line); ; A class Text { private: int num_lines; string text_buffer[80]; public: void addline(const char * line); void addline(const string line); ; B Μπορώ να αλλάξω την εσωτερική αναπαράσταση των δεδομένων μου και να μην επηρεαστεί το Interface της κλάσης, άρα δε χρειάζεται καμία αλλαγή ο κώδικας που αλληλεπιδρά μαζί της 17
18 void Text::addLine(const char * line) A { if (num_lines<80) { int len = strlen(line); text_buffer [num_lines] = new char[len+1]; strcpy(text_buffer[num_lines++], line); void Text::addLine(const char * line) { if (num_lines<80) { text_buffer [num_lines++] = line; B 18
19 Στον παραπάνω κώδικα είδαμε ότι την ίδια δουλειά την κάναμε αντικαθιστώντας 3 γραμμές κώδικα με 1. Όμως: Αυτό δε σημαίνει ότι η 1 αυτή συνάρτηση (τελεστής =) δεν κρύβει μεγάλη εσωτερική πολυπλοκότητα! Για παράδειγμα, η χρήση της βιβλιοθήκης STL, ειδικά για Ι/Ο, μπορεί να είναι έως και 2 τάξεις μεγέθους πιο αργή από τις αντίστοιχες συναρτήσεις C Συμπέρασμα: Αν θέλουμε υψηλή απόδοση: Ελέγχουμε 2-3 εναλλακτικές υλοποιήσεις Προτιμάμε χαμηλού επιπέδου συναρτήσεις, αν είμαστε διατεθειμένοι να γράψουμε λίγο κώδικα παραπάνω Προτιμάμε να έχουμε πλήρη επίγνωση και ακριβή έλεγχο των πράξεων και της δέσμευσης/αποδέσμευσης μνήμης που συντελείται 19
20 Αν δε δηλώσουμε προσδιοριστή πρόσβασης σε κάποια από τα μέλη μιας κλάσης, αυτά είναι private Πλέον, ένα struct (βλ. βασικούς τύπους) στη C++ συμπεριφέρεται κι αυτό σαν κλάση με τη διαφορά ότι ο default προσδιοριστής πρόσβασης είναι public 20
21 Είδαμε ότι για πρόσβαση στα πεδία και τις μεθόδους μιας κλάσης χρησιμοποιούμε τον τελεστή. : Person p1; p1.print(); Αν η μεταβλητή μας είναι δείκτης σε αντικείμενο (π.χ. Person * p1), τότε αντί να γράψουμε (*p1).print(), μπορούμε να γράψουμε κατευθείαν: p1->print(); 21
22 class Point { float x, y; public: Point(float xx = 0, float yy = 0) { x = xx; y = yy; void print() const { cout << x << "," << y << endl; void add(const Point& p) { x += p.x; y+= p.y; ; int main() { Point p1(1, 2), p2(3, 4); p1.add(p2); p1.print(); // Τυπώνει «4,6». p2.print(); // Τυπώνει «3,4». 22
23 Person.h #include <string> using namespace std; class Person { private: string name; unsigned short year; public: void set(const string& n, unsigned short y) { name = n; year = y void print(); ; 23
24 Person.cpp #include "person.h" #include <iostream> using namespace std; void Person::print() { // Δεν είναι inline. cout << name << ": " << year << endl; 24
25 MyApp.cpp #include "person.h" int main() { Person p1, p2; p1.set("γιάννης", 1968); p2.set("μαρία", 1970); p1.print(); // Τυπώνει «Γιάννης: 1968» p2.print(); // Τυπώνει «Μαρία: 1970» 25
26 Όπως και με τις απλές συναρτήσεις, έτσι και με τις δηλώσεις των κλάσεων έχουμε το πρόβλημα της πολλαπλής έμμεσης εισαγωγής αρχείου κεφαλίδας και άρα της πολλαπλής δήλωσης αρχείο mylib1.h: αρχείο mylib2.h: #include "person.h" void f(person p); αρχείο mynewapp.cpp: #include "person.h" #include "mylib1.h" #include "mylib2.h" void h(person p) { f(p); g(p); #include "person.h" void g(person p); // To person.h περιλαμβάνεται 3 φορές και // ο ορισμός της τάξης person δίνεται // 3 φορές στο mynewapp.cpp. Λάθος! 26
27 Όπως και με τις απλές συναρτήσεις: Person.h #ifndef _PERSON_H_ // Αν δεν έχει δημιουργηθεί η σταθερά // _PERSON_H_ του προεπεξεργαστή... #define _PERSON_H_ // Δημιουργία της σταθεράς. #include <string> using namespace std; class Person { private: string name; unsigned short year; public: void set(const string& n, unsigned short y) { name = n; year = y void print(); ; #endif 27
28 αρχείο car.h: #once #include driver.h" class Car { protected: Driver * drivers; ; αρχείο driver.h: #once #include car.h" class Driver { protected: Car * cars; ; Ένα από τα δύο δε θα μπορέσει να μεταγλωττιστεί σωστά! 28
29 αρχείο car.h: #once #include driver.h" class Car { protected: class Driver * drivers; ; αρχείο driver.h: #once #include car.h" class Driver { protected: class Car * cars; ; αρχείο car.cpp: #include car.h #include driver.h O compiler περιμένει να συναντήσει τη δήλωση αργότερα αρχείο driver.cpp: #include driver.h #include car.h Car::Car() { drivers = new Driver[10]; Driver::Driver() { cars = new Car[3]; 29
30 Γιατί είναι αναγκαίοι; Αρχικοποίηση τιμών πεδίων Κλήση αντίστοιχων κατασκευαστών περιεχόμενων αντικειμένων Στη C++ τα πεδία δεν αρχικοποιούνται σε κάποια default τιμή, οπότε πάντα πρέπει να τους προσδίδουμε μια τιμή αρχικοποίησης 30
31 class Person { string name; unsigned short year; // unsigned short year = 1980; // Λάθος. Δεν επιτρέπεται. public: ; void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; Στη C++11 επιτρέπονται και τέτοιες αρχικοποιήσεις. void print() { cout << name << ": " << year << endl; int main() { Person p1; // Τα p1.name και p1.year δεν έχουν αρχικοποιηθεί. p1.print(); // Τυπώνει «σκουπίδια» (τυχαίες τιμές). 31
32 class Person { string name; unsigned short year; public: void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; void print() { cout << name << ": " << year << endl; Person(const string& n, unsigned short y); // Κατασκευαστής Person() {name= ""; year=0; // default κατασκευαστής ; Person::Person(const string& n, unsigned short y) { name = n; year = y; int main() { Person p1; // καλείται ο default constructor αυτόματα Person p2 = Person("Γιώργος", 1975); p2.print(); // Τυπώνει «Γιώργος: 1975». 32
33 Αν δε δηλώσουμε κάποιον κατασκευαστή, δημιουργούνται αυτόματα από το μεταγλωττιστή 2 τυπικοί κατασκευαστές: Ο προεπιλεγμένος κατασκευαστής (default constructor): Δεν παίρνει κανένα όρισμα Ο κατασκευαστής αντιγραφής (copy constructor) : Παίρνει ως όρισμα ένα άλλο στιγμιότυπο της ίδιας κλάσης και αντιγράφει τα πεδία του Αν δε δώσουμε εμείς δικό μας default constructor, αυτός που δημιουργείται, δεν κάνει τίποτα! Αν δώσουμε οποιονδήποτε άλλο κατασκευαστή με ορίσματα και δε δηλώσουμε default constructor, τότε ΔΕ δημιουργείται ο πρώτος 33
34 class Person { string name; unsigned short year; ; // Δημιουργείται αυτόματα ο default constructor int main() { Person p1; // καλείται ο default constructor αυτόματα Person p2 = Person(); // καλούμε ρητά τον default constructor 34
35 class Person { string name; unsigned short year; Person (string n, unsigned int y) {name=n; year=y; ; // Δε δημιουργείται default constructor // αφού έχουμε δηλώσει άλλον constructor int main() { Person p1; // Σφάλμα! Δεν υπάρχει default constructor Person p2 = Person(); // Ομοίως Person p3 = Person( Γκόλφω, 23); Person p4( Γκόλφω, 23); // Ισοδύναμη αρχικοποίηση 35
36 class Person { string name; unsigned short year; public: void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; void print() { cout << name << ": " << year << endl; // Παίζει και το ρόλο προεπιλεγμένου κατασκευαστή: Person(const string& n = "?", unsigned short y = 1980) { name = n; year = y; ; int main() { Person p1; // OK. Χρησιμοποιεί το μοναδικό κατασκευαστή. // Person p1 = Person(); // Ισοδύναμο με το προηγούμενο. Person p2 = Person("Γιώργος", 1975); // ΟΚ. p1.print(); p2.print(); // Τυπώνει "?: 1980", "Γιώργος: 1975". 36
37 Είναι το σημείο στο οποίο μπορούμε να δώσουμε αρχικές τιμές σε: Πεδία Κατασκευαστές προγόνων της κλάσης Είναι το μοναδικό σημείο στο οποίο μπορούμε να αρχικοποιήσουμε αμετάβλητα (immutable) πεδία: Const πεδία Πεδία που είναι αναφορές Η λίστα αρχικοποίησης εκτελείται πριν τον κώδικα του κατασκευαστή 37
38 Αρχικοποίηση των πεδίων ενός αντικειμένου Κλήση του κατασκευαστή της κλάσης προγόνου με συγκεκριμένα ορίσματα 38
39 class Person { string name; unsigned short year; public: void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; void print() { cout << name << ": " << year << endl; // Παίζει και το ρόλο προεπιλεγμένου κατασκευαστή: Person() : name( unspecified ), year(1) ; { Αρχικοποίηση σε μορφή κατασκευαστή ακόμα και για τους βασικούς τύπους (θα δούμε γιατί όταν μιλήσουμε για templates) Αναδιάταξη: Ο μεταγλωττιστής αναδιατάσσει τη σειρά των αναθέσεων τιμών σύμφωνα με τη σειρά δήλωσης των πεδίων στην κλάση, ανεξάρτητα από το πώς τα δίνουμε στη λίστα αρχικοποίησης 39
40 Όπως και στη Java, έτσι και στη C++ μπορώ να έχω στατικά πεδία (static) Δε συγχέουμε τα const με τα static: const πεδίο: ορίζεται μια φορά για κάθε αντικείμενο, είναι ξεχωριστό για κάθε στιγμιότυπο της κλάσης και δεν αλλάζει static: ορίζεται σε επίπεδο κλάσης, είναι κοινό για όλα τα αντικείμενα μιας κλάσης και μπορεί να αλλαχθεί ανά πάσα στιγμή 40
41 class Person { string name; unsigned short year; const unsigned short min_year; public: void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; void print() { cout << name << ": " << year << endl; // Παίζει και το ρόλο προεπιλεγμένου κατασκευαστή: Person() : min_year(1910) {... Μόνο στη λίστα αρχικοποίησης μπορεί να προσδιοριστεί η τιμή ενός const πεδίου Person(unsigned short min_year) : min_year(min_year) {... Δεν υπάρχει σύγχυση ονομάτων ; 41
42 Η δήλωση του στατικού πεδίου γίνεται στη δήλωση της κλάσης Η αρχικοποίηση της τιμής του στατικού πεδίου γίνεται στο αρχείο υλοποίησης, υποχρεωτικά μόνο μια φορά: Foo.h: class foo { ; private: static int i; Foo.cpp: int foo::i = 0; 42
43 void somefunction() { Person p1, p2("γιάννης", 1975); Person* q1 = new Person; Person* q2 = new Person("Μαρία", 1984); p1.print(); p2.print(); // Τυπώνει «?: 1980», «Γιάννης: 1975». (*q1).print(); // Τυπώνει: «?: 1980». q1->print(); // Ισοδύναμο με το προηγούμενο. (*q2).print(); // Τυπώνει: «Μαρία: 1984». q2->print(); // Ισοδύναμο με το προηγούμενο. delete q1; delete q2; // Τα αντικείμενα που έχουν // δημιουργηθεί με new δεν καταστρέφονται // αυτόματα στο τέλος της συνάρτησης. Τελεστής «Α->Β» : Αν Α είναι δείκτης σε class/struct, ισοδύναμο με(*α).β 43
44 Person p1[3]; Person p2[] = { // Χρήση προεπιλεγμένου κατασκευαστή. // Αυτόματος υπολογισμός αριθμού θέσεων. Person("Γιώργος", 1975), Person("Μαρία", 1980) ; Person p3[3] = { // Χρήση προεπιλεγμένου Person("Γιώργος", 1975), // κατασκευαστή για την 3η θέση. Person("Μαρία", 1980) ; Person* q = new Person[2]; // Δυναμική καταχώριση με χρήση // του προεπιλεγμένου κατασκευαστή. q[0].setname("γιώργος"); q[0].setyear(1975); 44
45 const Person p1; p1.print(); // Το p1 δεν μπορεί να αλλάξει. // Ο μεταγλωττιστής δεν ξέρει ότι η print() // δεν αλλάζει το p1. class Person { // Βελτίωση για να αντιμετωπιστεί το πρόβλημα. public: void print() const { cout << name << ": " << year << endl;... ; p1.print(); // ΟΚ τώρα ξέρουμε ότι η print() δεν αλλάζει το p1. Μια const μέθοδος δεν επιτρέπεται να αλλάζει τις μεταβλητές- μέλη ή να καλεί μη-const μεθόδους του ίδιου αντικειμένου. 45
46 Επιστρέφει const string const string ToString(); string ToString() const; Η μέθοδος είναι const 46
47 Στη C++ υπάρχει η έννοια του destructor (καταστροφέα) Είναι μέθοδος που καλείται πριν αποδεσμευθεί ένα αντικείμενο από τη μνήμη Σε ιεραρχίες κλάσεων, καλεί και τον καταστροφέα του προγόνου 47
48 Στη Java, ο Garbage Collector περιοδικά ελέγχει για unreferenced objects και τα αποδεσμεύει από το χώρο δυναμικής εκχώρησης μνήμης Στη C++ είμαστε εμείς υπεύθυνοι γι αυτή τη λειτουργία Είδαμε ότι ένα αντικείμενο που δεσμεύω με new, μπορώ να το αποδεσμεύσω με delete Τι γίνεται όμως με μνήμη που δεσμεύεται εσωτερικά στις μεθόδους (π.χ. στον κατασκευαστή); Αυτή πρέπει να την καθαρίσω πριν διαγράψω το αντικείμενο από τη μνήμη, αλλιώς θα συνεχίσει να είναι δεσμευμένη, έστω και αν διέγραψα το αντικείμενο! 48
49 class MultiPerson { unsigned howmanynames; string* names; // Θα δείχνει στην 1η θέση δυναμικού πίνακα. public: MultiPerson(unsigned num = 1); void setname(unsigned i, const string& n) { names[i] = n; string getname(unsigned i) const { return names[i]; ; MultiPerson::MultiPerson(unsigned num) { howmanynames = num; names = new string[num]; // Δυναμική καταχώριση μνήμης. void f() { MultiPerson p(2); // Δύο θέσεις ονομάτων. p.setname(0, "Γιάννης"); p.setname(1, "Ιωάννης"); // Καταστρέφεται το p (μαζί και o δείκτης p.names), // αλλά όχι ο χώρος στον οποίο δείχνει το p.names... 49
50 class MultiPerson { unsigned howmanynames; string* names; public: MultiPerson(unsigned num = 1); ~MultiPerson(); // Καταστροφέας. void setname(unsigned i, const string& n) { names[i] = n; string getname(unsigned i) const { return names[i]; ; MultiPerson::~MultiPerson() { cout << "deleting" << endl; delete []names; void f() { MultiPerson p(2); p.setname(0, "Γιάννης"); p.setname(1, "Ιωάννης"); // ΟΚ, τώρα όταν τελειώνει η f καλείται ο καταστροφέας του p. 50
51 Δεν τους καλούμε απευθείας στο πρόγραμμά μας (*) Για αντικείμενα που έχουν δημιουργηθεί με στατική εκχώριση μνήμης (στη stack), ο καταστροφέας καλείται αυτόματα όταν το αντικείμενο παύει να υπάρχει (π.χ. στο τέλος της f στο προηγούμενο παράδειγμα). Για αντικείμενα που έχουν δημιουργηθεί με δυναμική καταχώριση μνήμης (με new), ο καταστροφέας καλείται όταν εκτελείται η εντολή delete (*) υπάρχουν εξαιρέσεις, αλλά είναι προχωρημένο θέμα 51
52 void f() { MultiPerson* q = new MultiPerson(2); q->setname(0, "Γιάννης"); q->setname(1, "Ιωάννης");... delete q; Καλείται ο καταστροφέας του MultiPerson (αφού υπάρχει), ο οποίος αποδεσμεύει τον πίνακα names. Στη συνέχεια, επιστρέφει ο κατασκευαστής και διαγράφεται το αντικείμενο q. 52
53 void Foo() { Person * p = new Person(); Person q = Person(); Δέσμευση Μνήμης Εκτέλεση Λίστας Αρχικοποίησης Κλήση Κατασκευαστή Προγόνου Κατασκευή του Person Κλήση Κατασκευαστή p->print(); q.print(); delete p; Καταστροφή του Person Κλήση μεθόδων της κλάσης Κλήση Καταστροφέα Κλήση Καταστροφέα Προγόνου Αποδέσμευση Μνήμης 53
54 Στατικές μέθοδοι είναι αυτές που ενώ δηλώνονται στο σώμα μιας κλάσης, ούτε χρησιμοποιούν, ούτε αλλάζουν μη στατικά πεδία της κλάσης αυτής Οι στατικές μέθοδοι είναι στην ουσία «ελεύθερες» συναρτήσεις που εννοιολογικά υπάγονται σε μια κλάση Δε χρειάζονται στιγμιότυπο της κλάσης (αντικείμενο) για να εκτελεστούν 54
55 class vec3 { private: float x, y, z; public: static vec3 crossproduct (vec3 a, vec3 b) { float x,y,z; x = a.y*b.z a.z*b.y; ;... y = a.z*b.x a.x*b.z; z = a.x*b.y a.y*b.x; return vec3(x,y,z); vec3 v1 = vec3::cross( vec3(0,2,0), vec3(-1,0,1) ); Εδώ τα x,y,z είναι οι τοπικές μεταβλητές x,y,z που έχουν προτεραιότητα σε σχέση με τα πεδία. 55
Προγραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 8η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προεπιλεγμένοι κατασκευαστές. Αντικείμενα και δυναμική καταχώριση μνήμης.
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 7η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Τάξεις: δημόσια και ιδιωτικά μέλη, μέθοδοι inline. Αρχεία κεφαλίδων και
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 10η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση των τελεστών εισόδου και εξόδου. Τάξεις και δυναμική καταχώριση
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 11η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υπερφόρτωση του τελεστή εκχώρησης. Στατικές μεταβλητές, στατικές σταθερές
Διαβάστε περισσότεραΚλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Διαβάστε περισσότεραΠρογραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 9η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Μέθοδοι με ορίσματα της ίδιας τάξης. Μέθοδοι που επιστρέφουν αντικείμενα
Διαβάστε περισσότεραΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ
ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Εισαγωγή στους δείκτες Το μοντέλο της μνήμης, σωρός και στοίβα Αναφορές Δείκτες και πίνακες Δέσμευση και αποδέσμευση μνήμης
Διαβάστε περισσότεραΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ
ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Deep/Shallow copies H αναγκαιότητα των κατασκευαστών αντιγραφής Ορισμός και χρήση κατασκευαστών αντιγραφής Τελευταία ενημέρωση:
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.
Διαβάστε περισσότεραΤελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )
ΤΕΛΕΣΤΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τι είναι οι τελεστές Χρήση τελεστών Υπερφόρτωση τελεστών Chain-linking Τελεστών Τελευταία ενημέρωση: Ιούνιος 2013 Εισαγωγή - 2 Τελεστής
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 4η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Δείκτες και πίνακες. Δείκτες σε σταθερές και σταθεροί δείκτες. Μεταβίβαση
Διαβάστε περισσότεραΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ
ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:
Διαβάστε περισσότεραΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Επέκταση κλάσεων στη C++ Τροποποίηση μεθόδων (method overriding) Κληρονομικότητα και κατασκευαστές, καταστροφείς,
Διαβάστε περισσότεραΕισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 12η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Τροποποίηση μεθόδων σε παράγωγες τάξεις. Κατασκευαστές παραγώγων τάξεων.
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 6η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προκαθορισμένες τιμές ορισμάτων. Υπερφόρτωση συναρτήσεων. Συναρτήσεις
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 14η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Εικονικές μέθοδοι και πολυμορφισμός με χρήση δεικτών ή αναφορών. Εικονικοί
Διαβάστε περισσότεραΚλάσεις και αντικείμενα #include <iostream.h<
Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
= Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Δεκέμβριος 2018 1/18 = 2/18 = 1 αντικειμένων Μέθοδοι αντιγράφου (copy constructor) Κατασκευή μέσω
Διαβάστε περισσότεραΥπερφόρτωση τελεστών
Υπερφόρτωση τελεστών 19 Νοεμβρίου 2012 1 Γενικά Στα προηγούμενα είδαμε ότι ορίζοντας μία κλάση, ορίζουμε ένα νέο τύπο τον οποίο μπορούμε να χρησιμοποιήσουμε για να δηλώσουμε αντικείμενα αυτής της νέας
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Διαβάστε περισσότεραΠρογραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις
Διαβάστε περισσότεραΚλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
Διαβάστε περισσότεραΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός
ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης CreativeCommons.
Διαβάστε περισσότεραΚατασκευαστές. Μέθοδοι Κατασκευής (Constructors).
Κατασκευαστές Μέθοδοι Κατασκευής (Constructors). Οι κατασκευαστές (constructors) είναι μέθοδοι που εκτελούνται όταν κατασκευάζεται ένα αντικείμενο. Μια τάξη μπορεί να έχει αρκετούς κατασκευαστές, οι οποίοι
Διαβάστε περισσότεραΕισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )
ΕΙΣΑΓΩΓΗ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Εισαγωγή στη C++ Ιστορικά στοιχεία για τη C/C++ Ένα βασικό πρόγραμμα Μεταγλώττιση ενός προγράμματος Τελευταία ενημέρωση: Σεπτέμβριος 2016
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες
Διαβάστε περισσότεραΟνοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!
Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Σεπτεμβρίου 2011. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα Η μνήμη του υπολογιστή Η κύρια μνήμη (main memory - RAM) του υπολογιστή κρατάει τα δεδομένα για την εκτέλεση των προγραμμάτων.
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Διαβάστε περισσότεραΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης
ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός
Διαβάστε περισσότεραΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ
ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Είδη καλουπωμάτων Μετατροπές και έλεγχοι τύπου Τελευταία ενημέρωση: Οκτώβριος 2013 Εισαγωγή - 2 Όπως και στη Java, στη C++
Διαβάστε περισσότεραΑντικειμενοστραφής Προγραμματισμός
Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο
Διαβάστε περισσότεραΑντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1
Αντικείμενα στη Java Παύλος Εφραιμίδης Java Αντικείμενα στη Java 1 Αντικείμενα (Objects) στην Java Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας
Διαβάστε περισσότερα«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ
«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ 1 4.1. Οριςμόσ φνθετων τφπων κλάςεων 2 Με εξαίρεςη τουσ βαςικούσ τύπουσ τησ Java (int, float, boolean, κλπ) τα
Διαβάστε περισσότεραΑντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)
Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο
Διαβάστε περισσότεραΑνάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός
Διαβάστε περισσότερα2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008
Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει
Διαβάστε περισσότεραΤι είναι κλάση Κλάση
35 Τι είναι κλάση Κλάση είναι μια συλλογή από μεταβλητές. Αλλιώς είναι ένα σύνολο από: δεδομένα που δηλώνουν τα χαρακτηριστικά της κλάσης (τι είναι) και συναρτήσεις που προδιαγράφουν την συμπεριφορά της
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Constructors Κλάσεις και αντικείμενα Ορισμός κλάσης: class
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό με C++
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό με C++ Ενότητα # 10: Constructors και Destructors Κωνσταντίνος Κουκουλέτσος Τμήμα Αυτοματισμού Άδειες
Διαβάστε περισσότεραΕαρινό. Ύλη εργαστηρίου, Ασκήσεις Java
Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων
Διαβάστε περισσότεραΕισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
Διαβάστε περισσότεραΔομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων
Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός
Διαβάστε περισσότεραΑρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )
ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ Γεώργιος Παπαϊωάννου (2013 14) gepap@aueb.gr Περιγραφή: Πολλαπλά αρχεία κώδικα Αρχεία κεφαλίδων Τελευταία ενημέρωση: Ιούλιος 2013 Εισαγωγή 2 Στη C/C++ τον κώδικά μας τον οργανώνουμε συνήθως
Διαβάστε περισσότεραΕρωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 3 Φεβρουαρίου 2013 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.155) Τι είναι το αντικείμενο και ποια τα χαρακτηριστικά του; Περιγράψτε το
Διαβάστε περισσότεραΚλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1
Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2
Διαβάστε περισσότεραΚλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack
Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2
Διαβάστε περισσότεραΑντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT
Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)
Διαβάστε περισσότεραΤο πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.
Το πρόγραμμα HelloWorld.java Σχόλια στη Java HelloWorld Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Το πρόγραμμα HelloWorld 1 Java Το πρόγραμμα HelloWorld 2 Σχόλια στη Java ΗγλώσσαJava υποστηρίζει
Διαβάστε περισσότεραΑναφορές, είκτες και Αλφαριθμητικά
Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών
Διαβάστε περισσότεραΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA
Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)
Διαβάστε περισσότεραΣυμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )
ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι Μαθήματα από το lab Boolean μεταβλητές: Συνήθως τα ονόματα που δίνουμε στις boolean μεταβλητές περιγράφουν
Διαβάστε περισσότεραΕργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:
Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 3 Java Classes Java Objects
Διαβάστε περισσότεραΔομημένος Προγραμματισμός
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
Διαβάστε περισσότεραΑπάντηση. // 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)?
Θέμα 1. Γράψτε τον κώδικα ενός header file που να περιέχει: 1) Ένα macro με όνομα divides που, αν του μεταβιβάσουμε δύο ακέραιους αριθμούς επιστρέφει 1 αν ο πρώτος αριθμός διαιρεί τον δεύτερο, αλλιώς,
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραΕντολές εισόδου - εξόδου. Εισαγωγή στη C++
Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout
Διαβάστε περισσότεραΔομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου
Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου
Διαβάστε περισσότεραΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++
Υπερφόρτωση, keywords CONST, STATIC, FRIEND ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Υπερφόρτωση Συναρτήσεων Τελεστών CONST αντικείμενα, μεταβλητές και συναρτήσεις
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies class Person private String name; public Person(String name) this.name
Διαβάστε περισσότεραΑ' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies class Person { private String name; public Person(String name){ this.name
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραΠρογραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως
Διαβάστε περισσότεραΔιάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning Αποθήκευση αντικειμένων Οι θέσεις μνήμης των αντικειμένων κρατάνε μια διεύθυνση στο
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies class ArrayVar { public static void main(string[] args){ int[] array = {1,2,3; int x = 4; increment(array); for (int
Διαβάστε περισσότεραΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++
Πέρασμα μεταβλητών, Templates, Συσχετίσεις μεταξύ κλάσεων ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) Τι θα συζητήσουμε σήμερα Πέρασμα με τιμή και με αναφορά Template functions και classes
Διαβάστε περισσότεραΕισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2
Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
Διαβάστε περισσότεραΠεριεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23
Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Έλεγχος ισότητας για Strings: Διαβάζουμε το String option και θέλουμε ένα loop να συνεχίσει
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Διαφορές Java και C++ ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΙΑΦΟΡΕΣ JAVA C++ Η
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα
Διαβάστε περισσότεραΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams
ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams CONSTRUCTORS DESTRUCTORS Η κλάση mystring class mystring private: char s[100]; public: char *GetString(); void SetString(char
Διαβάστε περισσότεραΟνοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!
Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Φεβρουαρίου 2010. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το
Διαβάστε περισσότεραΚεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)
Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε
Διαβάστε περισσότεραΓλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά
Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object
Διαβάστε περισσότεραΑ. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................
Διαβάστε περισσότεραΕισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6
Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη
Διαβάστε περισσότεραΠρογραμματισμός Η/Υ (ΤΛ2007 )
Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16
Διαβάστε περισσότεραΠρογραμματισμός Υπολογιστών με C++
Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 17η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Προσθήκη ελέγχου ορίων σε πίνακες χρησιμοποιώντας σχεδιότυπα τάξεων
Διαβάστε περισσότεραI (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input
Διαβάστε περισσότεραHelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1
HelloWorld Παύλος Εφραιμίδης Java Το πρόγραμμα HelloWorld 1 Το πρόγραμμα HelloWorld.java Σχόλια στη Java /** * The HelloWorld class */ class HelloWorld { public static void main(string[] args) { System.out.println("Hello
Διαβάστε περισσότερα