ΗΓλώσσαΠρογρα µµατισµού C++ (The C++...

86
12/10/2006 Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήμιο Θεσσαλίας 1 Η Γλώσσα Προγραμματισμού C++ (The C++ Programming Language) ∆ημήτριος Κατσαρός, Ph.D. Ελένη Τουσίδου, Ph.D. Χειμώνας 2006 ∆ιάλεξη 1η

Transcript of ΗΓλώσσαΠρογρα µµατισµού C++ (The C++...

Page 1: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

1

Η Γλώσσα Προγραµµατισµού C++

(The C++ Programming Language)

∆ηµήτριος Κατσαρός, Ph.D.

Ελένη Τουσίδου, Ph.D.

Χειµώνας 2006

∆ιάλεξη 1η

Page 2: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

2

Αντικείµενο του µαθήµατος• Το µάθηµα θα διαπραγµατευτεί

– την γλώσσα προγραµµατισµού C++• Υποθέτει εξοικείωση µε κάποια γλώσσαπρογραµµατισµού, π.χ., – C– JAVA– Pascal, Fortran, VBasic

• Εστιάζει στα κύρια χαρακτηριστικά της γλώσσας– Κλάσεις/Αντικείµενα– Κληρονοµικότητα και Πολυµορφισµό

• Επικεντρώνει– Σε ∆είκτες, Είσοδο/Έξοδο δεδοµένων

Page 3: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

3

Στόχος του µαθήµατος

• Στόχος του µαθήµατος είναι να προσφέρειστους διδασκόµενους τη γνώση των δοµώντης γλώσσας που θα επιτρέψουν την ανάπτυξηαντικειµενοστραφών προγραµµάτων

Page 4: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

4

Εργασίες

• Εργασίες, 3 ή 4 τον αριθµό– Υποχρεωτικές– Ατοµικές ή 2 ατόµων– Υλοποίηση αλγορίθµου/δοµής δεδοµένων, π.χ.,

• Κύριας µνήµης δενδρική δοµή ή αλγόριθµος• ∆ευτερεύουσας µνήµης δενδρική δοµή ή αλγόριθµος

– “Academic dishonesty” ανιχνεύεται από σχετικόεργαλείο λογισµικού που συγκρίνει κώδικες

Page 5: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

5

Τελική βαθµολόγηση

• Γραπτή Εξέταση– Θεωρία– Αληθές/Ψευδές– Ανάπτυξη κώδικα

• Εργασίες– αθροιστικά στο βαθµό της γραπτής εξέτασης, εάν πετύχετε τη “βάση εξέτασης”

• Τελικός βαθµός– 70% Γραπτής Εξέτασης + 30% Εργασιών

Page 6: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

6

∆ιδακτικό βοήθηµα Νο 1

• Θα καλύψει το 100% τουαντικειµένου του µαθήµατος

• Είναι στην αγγλική• Υπάρχει και µετάφρασηελληνική από τις εκδόσειςΤζιόλα

• 945 σελίδες• 2nd edition (February, 2005)• ~70 €• Αναλυτικό & κατανοητό

Page 7: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

7

∆ιδακτικό βοήθηµα Νο 2

• Από το δηµιουργό της C++ Bjarne Stroustrup

• Καλύπτει το 100% τουαντικειµένου του µαθήµατος

• Είναι στην αγγλική (υπάρχει η ηλεκτρονικήτου µορφή .pdf)

• Υπάρχει και µεταφρασµένο(ελληνική)

• 911 σελίδες• 3rd edition (June 20, 1997)• ~60 €• Αυστηρό, αλλά δύσκολο

Page 8: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

8

Για τη γλώσσα C, φυσικά …

• Από τους δηµιουργούς της C Kernighan & Ritchie

• Είναι στην αγγλική (υπάρχει η ηλεκτρονικήτου µορφή .pdf)

• Υπάρχει και µεταφρασµένο(ελληνική)

• 274 pages• 2nd edition (March 22, 1988)• ~40€• Σύντοµο και αυστηρό

Page 9: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

9

Πρόγραµµα διαλέξεων

• Οκτώβριος– 12 19 26 (ανάθεση εργασιών)

• Νοέµβριος– 2 9 16 23 30 (ανάθεση εργασιών)

• ∆εκέµβριος– 7 15 22 (ανάθεση εργασιών)

• Ιανουάριος ??– 11 18 25

Page 10: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

10

Ιστοσελίδα του µαθήµατος

• http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall06.htm

• Θα τοποθετούνται οι διαφάνειες του επόµενουµαθήµατος

• Επικοινωνία: [email protected] • Επικοινωνία: [email protected]

Page 11: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

11

Χρήσιµες ιστοσελίδες

• http://wps.aw.com/aw_savitch_abscpp_2s (Γλώσσα C++)• http://www.research.att.com/~bs/3rd.html (Γλώσσα C++)• http://cm.bell-labs.com/cm/cs/cbook/ (Γλώσσα C)• http://www.cuj.com/ (C/C++ User Journal)• http://cplus.about.com/ (C/C++ Home Page)• http://www.doc.ic.ac.uk/~wjk/C++Intro/ (Introduction to C++)

Page 12: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

12

Περιεχόµενα

• Περιγραφή & Ιστορία των C/C++• Περιήγηση στη C/C++

Page 13: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

13

Προ(Ιστορία) της C++

• BCPL (Basic Combined Programming Language), Martin Richards, 1960s

• B (typeless), αντικαθιστά BCPL, Ken Thompson, 1970• C (strongly typed), απόγονος της B, Dennis Ritchie, Bell

Labs, αρχές του 1973• C-With-Classes, Bjarne Stroustrup, 1979• C++, Bjarne Stroustrup, Bell Labs, 1983• ANSI C standardization (K&R, second edition), 1988 – …• Java, James Gosling, Sun, 1995• C#, Microsoft, πριν λίγα χρόνια

• C++, Java, C# διατηρούν (αρκετή από) τη σύνταξη της C

Page 14: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

14

Ο δηµιουργός της C++

BJARNEY

Page 15: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

15

Περιγραφή της C

• Γενικής χρήσης γλώσσα• “Procedural”: functions/procedures (όχι functional!)• “Imperative”: λίστα από imperatives (commands)• Μεσαίου επιπέδου• Tricky σύνταξη, αλλά αρκετά µικρή; Γρήγορηεκµάθηση

• Γλώσσα κατάλληλη για πολλές πλατφόρµες, µεταγλωττιστές χωριστοί για κάθε πλατφόρµα(διαφορετικά από τη Java)

Page 16: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

16

Γιατί θα επιλέγαµε τη C;

• Πριν τη C, δυο γενικοί τύποι γλωσσών:– Γλώσσες εφαρµογών (Applications languages)

• Υψηλού επιπέδου• COBOL, etc.• “Φορητές”, αλλά µη αποδοτικές

– Γλώσσες συστηµάτων (Systems languages)• Χαµηλού επιπέδου• Assembly• Αποδοτική, αλλά όχι “φορητή”

• Στόχος της C: γρήγορη και “φορητή”• Πώς: “αφηρηµένη” πάνω από την αρχιτεκτονική του

hardware, αλλά όχι µακριά του!

Page 17: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

17

Γιατί δεν θα επιλέγαµε τη C;1. Αλλά: η C είναι procedural (imperative)

• Περιοριµένη ενσωµάτωση (encapsulation)• Προγράµµατα = αλγόριθµοι + δοµές δεδοµένων– Η σχέση µεταξύ (δέσιµο µεταξύ των) αλγορίθµων και δεδοµένων που εφαρµόζει είναι take is

manual– Η εξυπνάδα/επινόηση είναι συνήθως ευρέως κατανεµηµένη /αποκεντρωµένη– Τα µεγάλα προγράµµατα είναι δύσκολο να κατανοηθούν/συντηρηθούν

2. ∆υναµική δέσµευση/διαχείριση µνήµης είναι εξ’ολοκλήρου manual– Όταν απαιτηθεί µνήµη at run-time πρέπει να ζητηθεί ο σωστός αριθµός των bytes, και να

ερµηνευτεί σωστά– Όταν τερµατιστεί το πρόγραµµα, πρέπει να θυµηθούµε να αποδεσµεύσουµε τη µνήµη

3. Γρήγορη (εν µέρει) επειδή υπάρχει µικρό error-checking– ar[-2] ή ar[100000] δεν “πετάει” exception (δεν υποστηρίζει exceptions!)

4. C simpliciter είναι multi-platform-compilable αλλά, e.g., graphics/GUI libraries συνήθως είναι platform-specific

5. ∆εν υπάρχουν τύποι για boolean (µόνο ints), string (µόνο char arrays), κ.τ.λ.6. ∆εν είναι multi-threaded7. Όλα είναι στο ίδιο namespace ( συγκρούσεις ονοµάτων)8. Όλες οι argument-passing λειτουργίες είναι pass-by-value; Προσοµοιώνουµε το pass-

by-reference µε pointers

Page 18: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

18

Γιατί θα επιλέγαµε τη Java;1. Η Java είναι αντικειµενοστραφής (object-oriented)2. Έχει garbage-collection3. Αποτρέπει πολλά από τα λάθη που εµφανίζονται “έγκυρα” στη C

• Ισχυρότερο typing έτσι αποτρέπει πολλά “έγκυρα” λάθη C/C++• Η Java έχει περισσότερο error-checking

• Ο πρωτόγονος array αντικαθίσταται µε το αντικείµενο array• Η Java έχει exceptions

• a[-2] “πετάει” exception4. Είναι multi-platform-runnable (compile µία φορά; Εκτελείται παντού)5. Έχει τύπους για boolean, string*, κ.τ.λ.6. Είναι multithreaded7. Έχει packages για την οργάνωση κλάσεων για αποτροπή συγκρούσεων

ονοµάτων8. Για όλα τα αντικείµενα ισχύει αυτόµατα το pass-by-reference; Για όλους τους

primitives τύπους δεδοµένων ισχύει το pass-by-value• Η Java είναι σπουδαία! Πολλά πανεπιστήµια πέρασαν από τη C στη Java• Ερώτηση: Υπάρχει τότε λόγος να µάθουµε τη C++?

Page 19: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

19

Γιατί θα επιλέγαµε τη C++;• Απάντηση: Βεβαίως!• Η Java είναι πολύ κοµψή, αλλά δεν µεταφράζεται (compiled) σεκώδικα µηχανής (machine code)– Είναι πολύ αργή!– O(20) φορές αργότερη από τις C/C++

• Τα Compiled Java προγράµµατα δεν είναι εκτελέσιµα, είναι.class’s– ∆εν εκτελούνται από το λειτουργικό σύστηµα, αλλά από τη JVM (java.exe)– Μεγάλη ιδέα: γράφουµε JVM για Web browser σε κάθε πλατφόρµα πουχρησιµοποιείται (δηλ., all 3 of them)

– κάθε browser µπορεί να εκτελέσει το applet• Σχεδόν όλα τα “πραγµατικά” λογισµικά για PC/Mac, ακόµα και ταίδια τα Windows και πολλές JVMs είναι γραµµένες σε …

• C++• Η C++ έχει πιο “απότοµη” καµπύλη εκµάθησης

– Έτσι η Java δεν είναι η εξ’ ορισµού γλώσσα

Page 20: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

20

Compilers vs. Interpreters

Source Code

Interpreter

Machine Code

Execution

Source Code

Compiler

Machine Code

Execution

CPU/Memory

COMPILED INTERPRETEDStorage

Page 21: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

21

Compilers vs. Interpreters• Compiled (e.g., C++):

– Εκτελείται γρηγορότερα– Τυπικά έχει µεγαλύτερη λειτουργικότητα– Ευκολότερη η βελτιστοποίηση– Περισσότερες εντολές διαθέσιµες– Η καλύτερη επιλογή για πολύπλοκα προγράµµατα πουαπαιτείται να εκτελούνται γρήγορα

• Interpreted (e.g. PHP, Perl):– Αργότερα, αλλά συχνά ευκολότερη ανάπτυξη– Επιτρέπει ελαστικότητα at runtime– Καταλληλότερη για εφαρµογές στο Web

Page 22: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

22

Το µοντέλο της Java

Virtual Machine

Machine Code

Execution

Source Code

Compiler

Byte Code

CPU/Memory

Storage

Page 23: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

23

Τι είναι η C++ και ο OOP;• Η C++ είναι ο απόγονος της C. Σε υψηλό επίπεδο: C++ ~= C+OOP• Μεγάλη ιδέα του OOP: οργάνωση του “κόσµου” σε “έξυπνα”αντικείµενα– Τα αντικείµενα δεν είναι καλά σε απλές ερωτήσεις– Είναι ικανά να επιλύουν προβλήµατα σχετικά µε τους εαυτούς τους

• Έννοιες/τύποι πραγµάτων σε world classes– Επιµέρους παραδείγµατα αυτών των πραγµάτων αντικείµενα– Κάθε αντικείµενο έχει

1. Τα δικά του δεδοµένα2. Πρόσβαση σε συναρτήσεις που επενεργούν στα δεδοµένα αυτά

• Το µεγάλο πλεονέκτηµα του OOP σε σχέση µε τις imperative γλώσσες:– Ένα imperative πρόγραµµα είναι απλώς µια λίστα “αφηρηµένων” εντολών

προς τον assembler, δηλ., µια λίστα “αφηρηµένων” εντολών κώδικα µηχανήςείναι γραµµένη έχοντας στο νου µας τη µηχανή

– Ένα OOP πρόγραµµα είναι αφηρηµένη σύλληψη των εννοιών και τωνπροβληµάτων που µας ενδιαφέρουν είναι γραµµένη έχοντας στο νου µαςτα ενδιαφέροντά µας

Page 24: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

24

Έννοιες του OOP1. Το αντικείµενο νοµοθετεί πώς θα προσπελαστούν τα

δεδοµένα του (encapsulation)– Μερικά δεδοµένα µπορεί να είναι προσβάσιµα από άλλα αντικείµενα,

αλλά µερικά όχι– Τα δεδοµένα µπορούν να τροποποιηθούν µε καλά καθορισµένους

τρόπους ευκολότερο να εγγυηθούµε correctness2. Μια class µπορεί να είναι ειδική περίπτωση κάποιας άλλης

(inheritance)– Το Ορθογώνιο είναι ένα γεωµετρικό σχήµα όπως το τετράγωνο, και

επιπλέον έχει ένα δεύτερο (πιθανόν) διακριτό χαρακτηριστικό– Το Χρωµατιστό-Ορθογώνιο είναι όπως το Ορθογώνιο, και έχει

επιπλέον και την έννοια του χρώµατος3. ∆ιαφορετικές classes σε µια ιεραρχία συµπεριφέρονται ορθά

(polymorphism)– shape.getArea() len*wid, εάν το σχήµα είναι ορθογώνιο– shape.getArea() PI*r2, εάν το σχήµα είναι κύκλος

• Το σηµαντικότερο εκ των τριών: encapsulation

Page 25: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

25

Why C++?1. Η C++ είναι OOP και procedural2. ∆εν έχει garbage collection, αλλά η δυναµική δέσµευση µνήµης είναι

απλούστερη από ότι στη C3. Σε κάποια ζητήµατα είναι ασφαλέστερη και σε κάποια όχι

• Έχει primitive. array, αλλά επίσης έχει has ασφαλέστερα/αργότερα array-like αντικείµενα

• Ισχυρότερο typing από ότι η C• Το casting είναι ασφαλέστερο, αλλά το παλιό casting εξακολουθεί να είναι

επισφαλές4. Όπως και η Java, έχει boolean τύπο και string class5. ∆εν είναι multi-threaded6. Υποστηρίζει namespaces για να αποτρέπει συγκρούσεις ονοµάτων7. Μπορεί να περάσει ως παραµέτρους αντικείµενα by reference

– Επίσης, µπορεί να περάσει ως παραµέτρους objects και primitive τύπους by value, by reference, ή by pointer

8. Υποστηρίζει function overloading (όπως και η Java)9. Υποστηρίζει operator overloading (Java δεν το υποστηρίζει)10. Υποστηρίζει default function parameter values11. Έχει πολλαπλή κληρονοµικότητα (η Java έχει µόνο single inheritance)

Page 26: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

26

Τι είναι η C++;

• Η C++ είναι (σχεδόν ακριβώς) υπερσύνολο της C– Οι έννοιες της C είναι επίσης έννοιες και της C++– (Σχεδόν) Κάθε έγκυρο πρόγραµµα σε C είναι ένα έγκυρο πρόγραµµα σε

C++• Το σύνολο των προγραµµάτων σε C++ περιέχει το σύνολο των προγραµµάτων

σε C• Μια στρατηγική για εκµάθηση της C++:

1. Εκµάθηση της C2. Εκµάθηση της (C++ - C)

• Για το µάθηµα αυτό, δεν θα ακολουθήσουµε αυτή τη στρατηγική• Σε γενικές γραµµές, εισαγάγουµε τις έννοιες καθώς εµφανίζονται

– Συγκρίνοντας/Αντιπαραθέτοντας µε τη C, Java, όπου είναι δυνατό• Θα υπάρχει κάποια επικάλυψη στην αρχή – βασική σύνταξη,

κοινές έννοιες– Η επικάλυψη θα εξαφανιστεί σύντοµα

Page 27: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

27

Ξεκινώντας µε τη C++

• Βασική C++

Page 28: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

28

C++ αρχεία

• Παραδοσιακά, τα προγράµµατα σε C χρησιµοποιούν την επέκταση.c και ταπρογράµµατα σε C++ την επέκταση.cpp

• Η C είναι ουσιαστικά ένα υποσύνολο της C++, και συνεπώς θα µπορούσαµε ναχρησιµοποιήσουµε έναν C++ compiler για ναεκτελέσουµε ένα C πρόγραµµα. ΟΙ δυο γλώσσεςείναι εξαιρετικά όµοιες– ΑΛΛΑ ∆ΕΝ ΕΙΝΑΙΙ∆ΙΕΣ!

Page 29: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

29

Ανατοµία ενός προγράµµατος C++

• Πηγαίος κώδικας για ένα απλό C++ πρόγραµµα:

#include <iostream>

using namespace std;

int main()cout << “No more Big Brother. Please.” << endl;return EXIT_SUCCESS;

Page 30: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

30

• #include είναι η εντολή προς τον προεπεξεργαστή (preprocessor)για να επιτρέψει στο πρόγραµµα να προσπελάσει περισσότερεςσυναρτήσεις, στην περίπτωση αυτή την “εντολή” cout, από τηνC++ Standard Library iostream.

– Υπάρχει κάτι περισσότερο στο #include, αλλά προς το παρόν θα αρκεστούµε στην ερµηνεία αυτή.

• #include χρησιµοποιείται σχεδόν πάντα, επειδή η core C++ έχειελάχιστες hardly any δεσµευµένες λέξεις:

Λίγη γνώση…

typedefregisterenumcase

unionreturnexternchar

static

sizeof

for

float

long

int

if

goto

continue

const

else

double

switchbreak

structauto

signedunsigned

volatilevoid

whiledo

shortdefault

Page 31: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

31

Κάποιοι κανόνες της C++

• Η C++ είναι ισχυρά typed.• C++ µπορεί να γίνει Object Orientated.• C++ έχει κάποιους απαράβατους κανόνες

Identifier Types:

Ορθή δήλωση Εσφαλµένη δήλωσηcount 1countronnie_size Eric Prydz twentyFour 13

Page 32: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

32

Σχόλια στον κώδικα

• Όπως και στην Java.

// this is a comment on one line

/* this is a commentand it is on more thanone line */

Page 33: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

33

C++ Τεχνικές

1. Variables - Μεταβλητές2. Operators - Τελεστές3. Decisions - Αποφάσεις4. Loops - Βρόχοι

Page 34: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

34

1. C++ Μεταβλητές & Εµβέλεια

• Οι µεταβλητές µπορούν να δηλωθούν οπουδήποτε στο πρόγραµµα.– Μέσα σε methods, classes, ή εκτός αυτών στο ‘global scope’

• Όµως είναι ορατές στο πρόγραµµα µόνο µέσα στο block του κώδικαστο οποίο ορίστηκαν.

int main()

int x = 4;if (x > 3)

int y = 3;cout << “x is “ << x << endl;cout << “y is “ << y << endl;

cout << “y is “ << y << endl;return EXIT_SUCCESS;

ERROR

Page 35: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

35

C++ Τύποι µεταβλητών• Υπάρχουν διάφοροι τύποι µεταβλητών, µερικοί εκ των οποίωνεικονίζονται παρακάτω (για κάποιον συγκεκριµένο compiler):

• ∆ιαφορετικά από ότι στη Java, η εµβέλειά τους εξαρτάται απότον compiler, έτσι οι παραπάνω τιµές είναι οι ελάχιστες πουκαθορίστηκαν από το ANSI standard.

• Κάθε compiler καθορίζει την εµβέλεια στη βιβλιοθήκη<climits>

-32,767 µέχρι 32,767int-127 µέχρι 127char

6 Ψηφία Ακρίβειαςfloat

10 Ψηφία Ακρίβειαςdouble

True ή Falsebool

-2,147,483,647 µέχρι 2,147,483,647long

Ελάχιστη δυνατή εµβέλεια τιµώνΤύπος

Page 36: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

36

2. C++ Τελεστές

• Οι τελεστές:

– Πρόσθεση x = y + z;

– Αφαίρεση x = y – z;

– Πολλαπλασιασµός x = y * z;

– “Πραγµατική” διαίρεση x = y / 3.14;

– “Ακέραια” διαίρεση x = y / 10;

– Λογικό AND if (x==1 && y==2)

– Λογικό OR if (x==1 || y==2)

– Λογικό NOT if (!x)

Page 37: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

37

C++ Τελεστές

• Και άλλοι τελεστές:

– Ίσο προς if (x==10)

– ∆ιαφορετικό από if (x!=10)

– Μικρότερο από if (x<10)

– Μεγαλύτερο από if (x>10)

– Μικρότερο ή ίσο από if (x<=10)

– Μεγαλύτερο ή ίσο από if (x>=10)

Page 38: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

38

C++ Τελεστές

• Οι τελεστές µοναδιαίας αύξησης και µοναδιαίας µείωσης:

– Αύξηση x++ ή ++x– Μείωση x–- ή –-x

– Σύντοµες αναθέσεις x *= 3 (πολλαπλασιασµός x επί 3)x += 5 (πρόσθεση 5 στο x)x -= 10 (αφαίρεση 10 από x)x /= 2 (υποδιπλασιασµός του x)

Page 39: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

39

C++ Τελεστές - prefix / postfix

• Υπάρχει µια διαφορά µεταξύ του x++ και του ++x ότανχρησιµοποιούνται σε µια έκφραση.

• Η ++x θα αυξήσει τη µεταβλητή πριν κάνει οτιδήποτε άλλοµ’ αυτή, ενώ η x++ θα την αυξήσει µετά την αποτίµηση(evaluation) της έκφρασης.

• Μόνο στην 1st περίπτωση το y τέθηκε στην τιµή 11.• Η προθεµατική µορφή (Prefix) είναι προτιµότερη εάν απλώςεπιθυµούµε να αυξήσουµε µια τιµή.

x = 10;

y = ++x;

το y τίθεται στην τιµή 11

x = 10;

y = x++;

το y τίθεται στην τιµή 10

y = 10;

y = y++;

το y είναι ακόµη 10

Page 40: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

40

• Όταν µεταβλητές ενός τύπου αναµειγνύονται µε κάποιονάλλον τύπο, τότε λαµβάνει χώρα η Type Conversion.

int main()

int x;char ch;float f;……ch = x;x = f;f = x;

Απλές µετατροπές Τύπων

Εάν το x είναι µεταξύ –128 και 127, τοch και το x θα πάρουν την ίδια τιµή. Αλλιώς, το ch θα αντικατοπτρίζει ταπρώτα 8 bits του x.

Εδώ, στο x θα ανατεθούν τα bits πουαναπαριστούν το µη δεκαδικό µέροςτου f.

Εδώ, το f θα είναι η δεκαδική µορφήτου x.

Page 41: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

41

• Μπορούµε να εξαναγκάσουµε µια έκφραση ναγίνει ενός συγκεκριµένου τύπου µε τη χρήση τουcasting. Η γενική µορφή του cast είναι:

(type) expression

• Όπου type είναι ένας έγκυρος τύπος δεδοµένων. Για παράδειγµα, για να είµαστε σίγουροι ότι ηέκφραση x/2 δίνει τύπο float, γράφουµε:

(float)(x/2) ή ((float)x)/2

• Χωρίς το cast, θα εκτελούνταν απλώς ακέραιαδιαίρεση.

Casting σε C++ - Βασικές έννοιες

Page 42: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

42

Αποφάσεις

• Η δοµή µιας έκφρασης if στην C++ είναι ως εξής:

Πολλαπλές εκφράσεις:

if (condition)

……else

……

Απλές εκφράσεις:

if (condition)true_statement;

else false_statement;

Page 43: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

43

Φωλιασµένες εκφράσεις If

int main()

int winner = -1;

cout << “…and the winner is… ”;

if (winner==1) cout << “ Bez” << endl;else if (winner==2) cout << “ Brigitte” << endl;else if (winner==3) cout << “ Kenzie” << endl;else cout << “There is no winner” << endl;

return EXIT_SUCCESS;

Page 44: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

44

Εκφράσεις Switch

• Οι εκφράσεις Switch είναι ως εξής:

switch (expression)

value_1 : statements_1; break;value_2 : statements_2; break;...value_n : statements_n; break;default:

……

Page 45: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

45

Ο βρόχος For

• Η δοµή ενός βρόχου For στη C++ είναι:

for (initialisation; condition; increment)

statements;

• Για παράδειγµα:int x;for(x=1; x<100; ++x)

cout << “Loop Number: ” << x << endl;

Page 46: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

46

Ειδικές περιπτώσεις βρόχων• Βρόχοι χωρίς “σώµα”, όπως παρακάτω:

for (time=0; time <10000; ++time);

• Μπορούµε να έχουµε όσες µεταβλητές ελέγχου επιθυµούµεµέσα στο βρόχο. Το επόµενο είναι έγκυρο:

for (x=0, y=0; x+y<10; ++x, ++y) …

• Ατέρµονοι βρόχοιfor ( ; ; )

cout << “Reality TV, no more, please…” << endl;

Page 47: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

47

Ο βρόχος While• Ένα παράδειγµα βρόχου while είναι το εξής:

#include <cstdio>int main()

char ch;while (ch != ‘Q’)

ch = getchar();

• η getchar() διαβάζει ένα χαρακτήρα από τηstandard input (συνήθως είναι το πληκτρολόγιο).

• Για να τη χρησιµοποιήσουµε πρέπει ναπροσθέσουµε την εντολή #include <cstdio>στην κορυφή του προγράµµατος.

Page 48: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

48

Ο βρόχος Do-while

• Ο βρόχος do-while εκτελεί επαναληπτικά έναblock κώδικα, καθ’ όσο η έκφραση υπό συνθήκηcond_expr είναι αληθής.

do someBigBoringCalculation;

while (cond_expr);

Page 49: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

49

Οι εντολές Continue & Break

• Η εντολή continue χρησιµοποιείται για ναεξαναγκάσει το πρόγραµµα να πάει στο “τέλος”ενός βρόχου, αγνοώντας όποιες εντολές έπονταιτου continue, και να συνεχίσει την εκτέλεση τουβρόχου στην επόµενη επανάληψη.

• Η εντολή break χρησιµοποιείται για νασταµατήσει ένα βρόχο άµεσα πριν από τονκανονικό τερµατισµό του, όπως θα γινόταν εάνικανοποιούνταν η συνθήκη τερµατισµού τουβρόχου.

Page 50: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

50

Οι εντολές Continue & Break

• Η εντολή exit() προκαλεί τον τερµατισµόολόκληρου του προγράµµατος. Ο αριθµός πουπερνάει ως παράµετρος στη συνάρτηση“επιστρέφεται” στο Λειτουργικό Σύστηµα.

if(ch == ‘Q’)

exit(0);

Page 51: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

51

Σχόλια …

• Η C++ είναι πολύ µεγάλη για να διδαχτεί σε 15 διαλέξεις. Απαιτείται αρκετή προσπάθεια από τονκαθένα και εξάσκηση πέρα από τις διαλέξεις.

• Η C++ είναι δύσκολη αρχικά, αλλά πολύτιµη, όταν την κάνουµε κτήµα µας.

• Είναι απολύτως σηµαντικό να µην “µείνει πίσω”κανείς. Το µάθηµα χτίζει πάνω στο προηγούµενουλικό πάρα πολύ γρήγορα.

Page 52: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

52

Στη συνέχεια …

• Από τι αποτελείται ένα πρόγραµµα σε C++?

• Μεταγλώττιση (compilation) και εκτέλεση(running) C++ προγραµµάτων

• Απλή χρήση της IO Stream:– Βασική IO από το πληκτρολόγιο– Βασική IO από αρχεία

Page 53: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

53

∆οµής προγράµµατος C++

Τα αρχεία C++ πάντα περιέχουν:- #include εντολές- Μια using namespace εντολή- Καθολικές (Global) δηλώσεις- Πρωτότυπα Συναρτήσεων (Function Prototypes), δηλ., δηλώσεις

- Μια συνάρτηση main()- Ορισµούς (definitions) Function, δηλ., (υλοποιήσεις)

Ένα µεγάλο πρόγραµµα σε C++ µπορεί να εκτείνεται σεπολλά αρχεία.

Page 54: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

54

#include <FILE>• Πριν χρησιµοποιηθεί µια συνάρτηση, πρέπει να οριστεί.

• Οι ορισµοί περιέχονται µέσα σε Header Files

• #include <FILE>– Αποκαλείται compiler directive, και πρακτικά σηµαίνει “Εισήγαγε ταπεριεχόµενα του FILE στο σηµείο αυτό”

– Αυτό επιτρέπει στο πρόγραµµα να χρησιµοποιήσει όποιες συναρτήσειςέχουν οριστεί µέσα στο FILE.

• ∆υο συχνά χρησιµοποιούµενοι headers– <iostream> - βασική IO πληκτρολογίου– <cstdlib> - η C standard library (συχνά χρησιµοποιούµενες συναρτήσεις)

Page 55: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

55

C++ headers ΚΑΙ ΌΧΙ C

• Το standard της C++ προσέφερε πολλά νέα header files. Επίσης, αντικατέστησε διάφορα αρχεία που υπήρχαν στη C.

• Παραδείγµατα:<math.h> <cmath><time.h> <ctime><limits.h> <climits>

• Το .h εγκαταλείφθηκε. Έτσι:<iostream.h> <iostream>

…θα πρέπει πάντα να χρησιµοποιούµε τη νέα έκδοση.

Page 56: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

56

using namespace NAME

• Τυπικά, γράφουµε απλώς– using namespace std;

• Προς το παρόν, θα το δούµε σαν συντόµευση τοοποίο θα σηµαίνει ότι αντί να γράφουµε εντολέςσαν τις παρακάτω:

std::cout << “Hello World” << std::endl;

Θα γράφουµε απλώς:

cout << “Hello World” << endl;

Page 57: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

57

Καθολικές (Global) δηλώσεις• ∆ιαφορετικά από την Java, στην οποία καθετί πρέπει ναείναι µέσα σε µια κλάση, η C++ επιτρέπει συναρτήσεις καιµεταβλητές να δηλώνονται µε καθολική (global) εµβέλεια. Π.χ.,:#include <iostream>using namespace std;int x = 3;int main()

cout << “The value of x is “ << x << endl;return EXIT_SUCCESS;

• Η C++ παρέχει Object Orientation µε τις classes, αλλά δενεπιβάλει την χρήση των.

Page 58: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

58

Καθολικές (Global) δηλώσεις

• Στο προηγούµενο παράδειγµα το x δηλώθηκε µεκαθολική εµβέλεια και έτσι είναι προσπελάσιµοαπό οπουδήποτε µέσα από το πρόγραµµα.

• Οι Καθολικές Μεταβλητές (Global Variables)γενικά θεωρούνται κακή πρακτική, και θα πρέπεινα αποφεύγονται όπου είναι δυνατόν.

• Οι Καθολικές Συναρτήσεις (Global Functions)χρησιµοποιούνται συχνά στη C++.

Page 59: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

59

Πρωτότυπα Functions (1)• Όπως ενηµερώνουµε τον compiler ότι θα χρησιµοποιήσουµε την cout µε την

εντολή #include <iostream>, πρέπει να ενηµερώσουµε τον compiler γιατην ύπαρξη της συνάρτησής µας πριν από την πρώτη χρήση της. ∆είτε το:

bool isPositive(int x);

int main cout << isPositive(3) << endl;return EXIT_SUCCESS;

bool isPositive(int x)if (x > 0) return true;else return false;

Page 60: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

60

Πρωτότυπα Functions (1)

• Στο προηγούµενο παράδειγµα η κόκκινη γραµµήπαρέσχε τη δήλωση της συνάρτησης isPositive().

• Η main() µπορεί να χρησιµοποιήσει αυτή τησυνάρτηση, παρόλο που δεν έχει οριστεί ακόµη –αυτό συµβαίνει κάτω από την main.

• Όπως και οι µεταβλητές, έτσι και οι συναρτήσεις δενµπορούν να χρησιµοποιηθούν µέχρι να οριστούν.

Page 61: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

61

Η συνάρτηση main• Η εκτέλεση ενός C++ προγράµµατος αρχίζει στηνκορυφή µιας συνάρτησης που ονοµάζεται mainκαι την εκτελεί “γραµµή-προς-γραµµή”.

• H main επιστρέφει έναν integer, ο οποίοςεπιστρέφεται στο λειτουργικό σύστηµα και δείχνειπώς τελείωσε το πρόγραµµα.– EXIT_SUCCESS ορίζεται για το σκοπό αυτό.

• Στη main µπορούµε να περάσουµε ορίσµαταγραµµής εντολής (σε επόµενη διάλεξη θα δούµεπώς µπορεί να γίνει αυτό.

• H main πάντα έχει καθολική εµβέλεια.

Page 62: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

62

Ορισµοί Functions• Πίσω στο παράδειγµα isPositive:bool isPositive(int x);

int main

cout << isPositive(3) << endl;return EXIT_SUCCES;

bool isPositive(int x)

if (x > 0) return true;else return false;

• Το κόκκινο κείµενο είναι ο ορισµός/υλοποίησητης συνάρτησης.

bool isPositive(int x)

if (x > 0) return true;else return false;

int main

cout << isPositive(3) << endl;return EXIT_SUCCESS;

Page 63: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

63

Μεγάλα C++ προγράµµατα (1)

• Μπορεί να εκτείνονται σε πολλά αρχεία.• Γενικά, τα αρχεία είναι σε ζεύγη.

– Ένα header file (myFileName.h)• Περιέχει όλους τους ορισµούς των συναρτήσεων / αντικειµένων που χρειάζονται στην υλοποίηση τουπρογράµµατος.

– Ένα implementation file (myFileName.cpp)• Includes το header και κατόπιν υλοποιεί τις συναρτήσεις / αντικείµενα που περιέχονται στο header file.

Page 64: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

64

Μεγάλα C++ προγράµµατα (2)

• Υπάρχουν διάφοροι λόγοι για να σπάσουµε έναµεγάλο πρόγραµµα σε µικρά κοµµάτια και ηµέθοδος header/implementation είναι άριστηπρακτική:– Χρειάζεται να κάνουµε compile 1 αρχείο κάθε φορά.– Εύκολη διαχείριση.– Επιτρέπει να γράφουµε utility methods, π.χ., trimString() και να τις χρησιµοποιούµεοπουδήποτε επιθυµούµε κάνοντας απλώς include τοσχετικό header.

Page 65: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

65

Page 66: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

66

Πώς γίνεται ένα εκτελέσιµο?

• Ένα C++ πρόγραµµα ακολουθεί 2 κύριαστάδια, ώστε να γίνει εκτελέσιµο.

– 1) Compilation (Μεταγλώττιση)

– 2) Linking (Σύνδεση)

Page 67: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

67

Μεταγλώττιση προγράµµατος• Τι συµβαίνει όταν χτίζεται (build) ένα πρόγραµµα/αρχείο:

• Ο compiler περικλείει τα απαραίτητα headers και κάνειcompile το πηγαίο αρχείο του προγράµµατος, ώστε ναπαραχθεί το ‘object file’.

• Τα object files είναι ο µισός δρόµος µέχρι να φτιαχτεί τοπρόγραµµα, αλλά δεν έχουν όλη την απαιτούµενηλειτουργικότητα ακόµα …

main()&

Otherfunctions

Iostream

Header

Compiler + ObjectCode

Page 68: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

68

Σύνδεση προγράµµατος

• Ο Object code κατόπιν συνδυάζεται µε τιςσχετικές libraries, οι οποίες είναι επίσης object code, ώστε να παραχθεί το πλήρες πρόγραµµα.

• Αυτή είναι η διαδικασία της σύνδεσης (linking process).

• Αυτές οι βιβλιοθήκες (libraries) είναι οι δυαδικέςυλοποιήσεις των συναρτήσεων που ορίζονταιστους headers που περικλείουµε στο πρόγραµµάµας.

Page 69: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

69

Object Code• Θυµηθείτε το “hello world”. Χρησιµοποιήσαµε την coutγια να κάνουµε “εκτύπωση” στην οθόνη.

– Το header <iostream> επιτρέπει στο πρόγραµµα να κάνει compile τον object code. Αλλά αυτός ο object code έχει “κενά” (holes) µέσα του – στην περίπτωσή µας, για τις cout, και endl.

– Ουσιαστικά το header file ορίζει σχήµα αυτών των κενών.

– Οι cout και endl είναι µέρη της C++ standard library, έτσι at linking time ο object code των προγραµµάτων συνδέεται(combined) µε το σχετικό κώδικα βιβλιοθήκης (library code) γιανα παραχθεί το πλήρες εκτελέσιµο πρόγραµµα.

– Έτσι, τα κενά (holes) καλύπτονται µε τα σωστά σχήµατα.

Page 70: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

70

Page 71: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

71

Page 72: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

72

Input και Output• Η C++ επιτρέπει αρκετά ακριβή έλεγχο στηνΕίσοδο (Input) και Έξοδο (Output).

• Οι ίδιοι µηχανισµοί µπορούν να χρησιµοποιηθούνγια να διαβάσουµε (read) ή να γράψουµε (write)δεδοµένα από και προς αρχεία. Είναι επίσηςδυνατόν να χειριστούµε τις συµβολοσειρές(character strings) µε παρόµοιο τρόπο.

• ∆εν συνιστούµε να αναµειγνύουµε C++ και Cstyles. Όµως, η C είναι υποσύνολο της C++, καιέτσι µερικές φορές συµβαίνει. Όµως, θα πρέπει ναπροσπαθήσουµε να το αποφύγουµε.

Page 73: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

73

Προκαθορισµένα Streams της C++• Ένα stream απλά αναφέρεται σε µια ροή δεδοµένων από ήπρος µια συσκευή.

• Ένα stream είναι υψηλού επιπέδου αφαίρεση (abstraction), επειδή είναι µια όψη της συσκευής ανεξάρτητη τηςυλοποίησης στο υλικό (hardware-independent).

• Η C++ παρέχει συναρτήσεις που “περικλείουν” αυτά ταstreams και επιτρέπουν εύκολη υλοποίηση από το χρήστη.

• Έτσι, το πιο σηµαντικό χαρακτηριστικό της βιβλιοθήκηςiostream είναι η δυνατότητα επέκτασής της.

Page 74: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

74

Τα Streams

• 4 ενσωµατωµένα (built in) streams ανοίγουν αυτόµατα:

Stream Σηµασία Default Συσκευήcin Standard input Πληκτρολόγιοcout Standard output Οθόνηcerr Std error output Οθόνηclog Buffered version Οθόνη

Page 75: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

75

Η “καθαρή” C++ προσέγγιση

• Η C++, ενώ περιέχει όλη τη C, χειρίζεται την I/O πολύ διαφορετικά απόότι η C.

cout << “OOS on Friday’s make’s my day.”;

• Τα << και >> είναι απλώς τελεστές, αλλά, στη C++ µπορούν να γίνουνoverloaded. Για παράδειγµα:

flushing τον buffer: cout << flush;νέα γραµµή: cout << endl;

• Συγχώνευση µε <<:

cout << “Jim “ << “needs “ << “a “ << endl << “haircut”;

Page 76: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

76

Χαρακτήρες Escape• Η C++ παρέχει πολλούς κωδικούς ελέγχου:

\b Backspace\n New Line\r Carriage Return\t Horizontal Tab\v Vertical Tab\” Double Quote\’ Single Quote\a Alert\\ Backward Slash\xN Εκτυπώνει σε hex, όπου N είναι η τιµή.

Page 77: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

77

Εκτυπώνοντας µεταβλητές• Οι µεταβλητές µπορούν να εκτυπωθούν µε τον ίδιο τρόπο:

string str;str = “Elvis lives in Lenton”cout << str << endl;

• Και πολλές µεταβλητές µαζί µε τον ίδιο τρόπο:

int x = 1;int y = 2; cout << x << “ + “ << y << “ = “ << (x+y) << endl;

• Σηµειώστε ότι η cout µπορεί να χειριστεί οποιοδήποτε τύπο µεταβλητής.

Page 78: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

78

cin – ∆ιαβάζοντας από το χρήστη• cin είναι αντικείµενο της class istream πουαναπαριστά την standard input.

• Εξ’ ορισµού, η standard input διαβάζεται από τοπληκτρολόγιο, έτσι µε τη cin γενικά παίρνουµε είσοδοαπό το χρήστη.

• Ως ένα istream object ερµηνεύει την είσοδο ωςstream χαρακτήρων, από το οποίο µπορούµε ναπάρουµε formatted δεδοµένα µε τον τελεστή>>.

• We can also get unformatted data using member functions like get, getline and read.

Page 79: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

79

∆ιαβάζοντας σε µεταβλητές• Οι µεταβλητές µπορούν να πάρουν τιµές από την είσοδο. Για

παράδειγµα:

int age;cin >> age;

Ορίζει τη µεταβλητή age ως ακέραιο (int) και κατόπιν περιµένει γιαείσοδο από τη cin (πληκτρολόγιο) και την αποθηκεύει στη µεταβλητήαυτή.

• Μπορούµε επίσης να διαβάσουµε/αναθέσουµε πολλές µεταβλητές µαζί:

cin >> a >> b;

Αυτό είναι µε το παρακάτω:

cin >> a;cin >> b;

Page 80: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

80

∆ιαβάζοντας ολόκληρη γραµµή• Εξ’ ορισµού, όσοι “λευκοί” χαρακτήρες (whitespace) προηγούνται,

αγνοούνται από τη cin. Όµως θα διαβάσει µόνο µέχρι το πρώτο κενόµετά από µια λέξη – αυτό δεν είναι χρήσιµο εάν επιθυµούµε ναδιαβάσουµε µια ολόκληρη πρόταση. Θα λέµε ότι είναι delimited µε τοκενό.

• Μπορούµε να διαβάσουµε µια ολόκληρη γραµµή ως εξής:

string str;getline(cin, str);

Αυτό είναι delimited µε το χαρακτήρα τέλους γραµµής \n. Αλλά µπορούµενα χρησιµοποιήσουµε οποιοδήποτε άλλο χαρακτήρα:

getline(cin, str, “|”);getline(cin, str, “-”);

Page 81: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

81

Βάζοντάς τα όλα µαζί …

string name;int mark;

cout << "Please Enter your First Name:";getline(cin, name);

cout << “What mark do you want to get in OOS?";cin << mark;

cout << set(25) << setfill(‘.’) << name << “, You’ll be lucky”;

Θέτει το πλάτος (width)της εξόδου σε σταθερόεύρος 25 χαρακτήρων

Κάθε µια από αυτές τιςθέσεις που δεν έχουν

χαρακτήρα από την είσοδοθα έχει µια τελεία (dot ).

Page 82: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

82

Οι Χειριστές της coutuppercase Replaces lowercase letters with their uppercase equivalents in generated outputleft Adds fill characters on the right (final positions) of certain generated outputright Adds fill characters on the left (initial positions) of certain generated output

setfill(char_type c) Sets the character used to pad (fill) an output conversion to the specified width

setw(int n) Sets the field width (number of characters) to generate on certain output conversions

fixed Generates floating-point output in fixed-point notationscientific Generates floating-point output in scientific notation setprecision(int n) Sets the precision (number of digits after the decimal point) to generate.showpos Generates a + sign in non-negative generated numeric output.showbase Generates a prefix indicating the numeric base of generated integer output

flush Flushes the output bufferendl Inserts a newline character into the output sequence and flushes the output buffer ends Inserts a null character into the output sequence

Page 83: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

83

Θέµατα Style• Κώδικας

– Οι εντολές σε ένα block κώδικα να είναι στοιχισµένες.– Τα άγκιστρα να αρχίζουν σε νέα γραµµή.– Τα ζεύγη αγκίστρων να είναι στην ίδια στήλη.– Πάντα αφήνουµε περιθώριο (indentation) όταν αρχίζουµεένα νέο block κώδικα.

– ∆εν χρειάζεται περιθώριο 50 κενών. 3 ή 4 είναι ΟΚ

• Σχόλια– ∆εν πρέπει να προκαλούν σύγχυση.– Εάν εµφανίζονται µετά από εντολή, διαχωρίστε τα από τηνεντολή µε ένα tab, ώστε κατά το δυνατό να είναι όλα στηνίδια στήλη.

– ΠΟΤΕ, ΠΟΤΕ, µην σχολιάζετε κάτι που είναι προφανές.

Page 84: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

84

Θέµατα Style

• Τα σχόλια θα πρέπει να προηγούνται του blockκώδικα και όχι µέσα στο block

• ∆εν χρειάζεται να σχολιάζουµε το τέλος ενόςblock από κώδικα “this is the end of the loop”εκτός και εάν συντρέχει ειδικός λόγος.

• Χρησιµοποιείστε κενές γραµµές για ναδιαχωρίσετε τις classes και τις συναρτήσεις. Είναιπολύ σηµαντικό για να γίνει ο κώδικας ευκολο-διάβαστος. Για παράδειγµα:

Page 85: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

85

Θέµα οµορφιάς …

//*****************************************************************// Face Class for AI (by J.Goulding Sep-2000) //*****************************************************************

class Face

friend Face operator+ (const Face&, const Face&); //Face Additionfriend Face operator- (const Face&, const Face&); //Face Additionfriend Face operator* (const double& , const Face&); //Constant Multiplication

public:Face(int w=1, int h=1); //Face ConstructorFace(const Face&); //Copy Constructor~Face (); //Face DestructorFace& operator= (const Face&); //Face Assignment…

Page 86: ΗΓλώσσαΠρογρα µµατισµού C++ (The C++ …delab.csd.auth.gr/~dimitris/courses/cpp_fall06/lectures/...12/10/2006 ΤµήµαΜηχανικώνΗ/Υ, Τηλεπικοινωνιώνκαι∆ικτύων,

12/10/2006 Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ∆ικτύων, Πανεπιστήµιο Θεσσαλίας

86

Θέµα οµορφιάς …//============================================// Constructor Method//============================================Face::Face(int w, int h)

width = w; height = h; name = "none"; faceVector v(width*height);

//---------------------------------------------------------------------------------------// This is a loop that fills the vector with the appropriate pixels//---------------------------------------------------------------------------------------for (i=0; i<width*height; i++)

v[ i ] = rand(256);