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

Σχετικά έγγραφα
Προγραμματισμός Υπολογιστών με C++

Κλάσεις ΚΛΑΣΕΙΣ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

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

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

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

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

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

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

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

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

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

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

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

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

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

Πίνακες (Arrays) Εισαγωγή στη C++

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

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

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

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

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

4 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

JAVA VS C++ ΠΡΟΓΡΑΜΜΑΤΑ ΜΕ ΠΟΛΛΑ ΑΡΧΕΙΑ ΣΥΝΘΕΣΗ ΚΑΙ ΣΥΝΑΘΡΟΙΣΗ

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

Δομές δεδομένων (Structures) Εισαγωγή στη C++

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

Δομές Επανάληψης. Εισαγωγή στη C++

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

Αναφορές, είκτες και Αλφαριθμητικά

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

Υπολογιστικά Mαθηματικά II

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

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

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

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

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

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

Δομημένος Προγραμματισμός

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Στοιχειώδης προγραμματισμός σε C++

Συναρτήσεις (Functions) Εισαγωγή στη C++

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

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

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Μεθόδων Επίλυσης Προβλημάτων

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Μεθόδων Επίλυσης Προβλημάτων

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

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ ΑΣΚΗΣΗ

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

Transcript:

Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 7η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1

Τι θα ακούσετε σήμερα Τάξεις: δημόσια και ιδιωτικά μέλη, μέθοδοι inline. Αρχεία κεφαλίδων και τάξεις. Αποφυγή πολλαπλής εισαγωγής αρχείου κεφαλίδας. Κατασκευαστές. 2

class Person { public: string name; unsigned short year; unsigned phone; ; // Προσοχή, χρειάζεται «;». Τάξεις int main() { Person p1, p2; p1.name = "Γιάννης"; p2.name = "Μαρία"; p1.year = 1968; p2.year = 1970; p1.phone = 2108203571; p2.phone = 2108203572; cout << p1.name << ": " << p1.year << ", " << p1.phone << endl << p2.name << ": " << p2.year << ", " << p2.phone << endl; 3

Μέθοδοι (συναρτήσεις) σε τάξεις class Person { public: string name; unsigned short year; unsigned phone; void greeting(); ; void Person::greeting() { cout << "Το όνομά μου είναι " << name << endl; int main() { Person p1, p2; // Τιμές όπως στην προηγούμενη διαφάνεια. p1.greeting(); p2.greeting(); 4

Δημόσια και ιδιωτικά μέλη class Person { private: // Μόνο οι μέθοδοι της Person έχουν πρόσβαση σε αυτά: string name; unsigned short year; void test(); public: // Σε αυτά έχουν πρόσβαση όλοι: void set(const string& n, unsigned short y); void print(); ; void Person::set(const string& n, unsigned short y) { name = n; // ΟΚ. Οι μέθοδοι της Person έχουν πρόσβαση year = y; // στις ιδιωτικές μεταβλητές της Person. void Person:: print() { cout << name << ": " << year << endl; test(); // ΟΚ. Οι μέθοδοι της Person έχουν πρόσβαση στις // ιδιωτικές μεθόδους της Person. 5

Δημόσια/ιδιωτικά μέλη συνέχεια 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() είναι ιδιωτικό μέλος. 6

Δημόσια ή ιδιωτικά; Δηλώνουμε ως δημόσια μόνο τα μέλη που χρειάζεται να γνωρίζει ο χρήστης της τάξης. Συνήθως δηλώνουμε ως ιδιωτικές τις μεταβλητές και γενικότερα τις δομές δεδομένων που χρησιμοποιούν εσωτερικά τα αντικείμενα της τάξης και επιτρέπουμε την είσοδο/έξοδο δεδομένων πρός/από αυτές μόνο μέσω δημόσιων μεθόδων της τάξης. Αυτό μας επιτρέπει να αλλάζουμε τον τρόπο αποθήκευσης των δεδομένων στο εσωτερικό των αντικειμένων της τάξης, χωρίς να επηρεάζονται προγράμματα που χρησιμοποιούν τις δημόσιες μεθόδους της. Μας επιτρέπει επίσης να ελέγχουμε μήπως τα δεδομένα που εισέρχονται προς τα αντικείμενα της τάξης παραβιάζουν περιορισμούς (π.χ. ηλικία > 150). 7

Μέθοδοι inline class Person { private: string name; unsigned short year; public: // Επιτόπου ορισμός. Η set() θα είναι inline // (βλ. προηγούμενες διαλέξεις): void set(const string& n, unsigned short y) { name = n; year = y; void print(); ; (. δήλωση // H print δεν είναι inline. (Εκτός αν γράψουμε «inline» στη void Person:: print() { cout << name << ": " << year << endl; 8

Αρχεία κεφαλίδων και τάξεις αρχείο 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(); ; 9

Αρχεία κεφαλίδας και τάξεις συνέχεια αρχείο person.cpp: #include "person.h" #include <iostream> using namespace std; void Person:: print() { // Δεν είναι inline. cout << name << ": " << year << endl; 10

Χρήση αρχείων κεφαλίδων με τάξεις αρχείο myapp.cpp: #include "person.h" int main() { Person p1, p2; p1.set("γιάννης", 1968); p2.set("μαρία", 1970); p1.print(); // Τυπώνει «Γιάννης: 1968» p2.print(); // Τυπώνει «Μαρία: 1970» 11

Προβλήματα με αρχεία κεφαλίδων αρχείο mylib1.h: #include "person.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); void g(person p); // To person.h περιλαμβάνεται 3 φορές και // ο ορισμός της τάξης person δίνεται // 3 φορές στο mynewapp.cpp. Λάθος! 12

Βελτιωμένο αρχείο 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 Αν κατά λάθος περιλάβω δύο φορές το person.h σε ένα αρχείο, τη 2η φορά η σταθερά _PERSON_H_ θα υπάρχει και θα αγνοηθούν οι γραμμές μεταξύ #ifndef και #endif. 13

Η αναγκαιότητα των κατασκευαστών class Person { string name; unsigned short year; Στη C++11 επιτρέπονται και τέτοιες αρχικοποιήσεις. // unsigned short year = 1980; // Λάθος. Δεν επιτρέπεται. public: void setname(const string& n) { name = n; void setyear(unsigned short y) { year = y; void print() { cout << name << ": " << year << endl; ; int main() { Person p1; // Τα p1.name και p1.year δεν έχουν αρχικοποιηθεί. p1.print(); // Τυπώνει «σκουπίδια» (τυχαίες τιμές). 14

Κατασκευαστές 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::Person(const string& n, unsigned short y) { name = n; year = y; int main() { // Person p1; // Λάθος. Δεν επιτρέπεται πια! Person p2 = Person("Γιώργος", 1975); p2.print(); // Τυπώνει «Γιώργος: 1975». 15