Ασκήσεις &απαντήσεις Επανάληψης

Σχετικά έγγραφα
Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

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

Κλάσεις και Αντικείµενα

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

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

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

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

Προγραµµατιστικές Τεχνικές

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

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

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

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

Διαδικασιακός Προγραμματισμός

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

3 Αλληλεπίδραση Αντικειμένων

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

scanf() scanf() stdin scanf() printf() int float double %lf float

Προγραµµατιστικές Τεχνικές

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Η γλώσσα προγραμματισμού C

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Συναρτήσεις και διαδικασίες

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Η βασική συνάρτηση προγράμματος main()

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Aσκήσεις Πράξης 6 - EΠΑΝΑΛΗΠΤΙΚΟ A ΜΕΘΟ ΟΛΟΓΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ι ΕΡΓΑΣΤΗΡΙΟ. 5. Τι τυπώνει το επόµενο πρόγραµµα:

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

3. Εκφράσεις και έλεγχος ροής

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Υπολογισμός - Εντολές Επανάληψης

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Τελικό τεστ - απαντήσεις

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Ενδεικτική περιγραφή μαθήματος

18. ΡΕΥΜΑΤΑ(STREAMS) ΚΑΙ ΑΡΧΕΙΑ (FILES)

Επανάληψη για τις Τελικές εξετάσεις

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Transcript:

Ασκήσεις &απαντήσεις Επανάληψης EΙΣΑΓΩΓΗ 01 Ποιος είναι ο σκοπός της προεπεξεργαστικής οδηγίας: #include <iostream> Η οδηγία αυτή συµπεριλαµβάνει στον κώδικα, τον φάκελο επικεφαλίδων iostream.h, στη θέση ακριβώς που βρίσκεται. Ο φάκελος iostream.h περιλαµβάνει τις δηλώσεις που χρειάζονται για εισαγωγή (input) και εξαγωγή(οutput) δεδοµένων, π. χ. τον ορισµό του τελεστή εξαγωγής δεδοµένων <<. 02 Εντοπίστε και διορθώστε τα λάθη σε κάθε µια από τις ακόλουθες προτάσεις: a) cout >> count; b) int double = 44; a). Το αντικείµενο εξόδου cout χρειάζεται τον τελεστή εξόδου <<. Θα έπρεπε να είναι cout << count; b) Η λέξη double είναι λέξη κλειδί στην C++. εν µπορεί να χρησιµοποιηθεί για ονόµατα µεταβλητών. Το σωστό θα ήταν int d = 44; 03 Σε τι διαφέρουν οι 2 παρακάτω προτάσεις: char ch = A ; char ch = 65; Και οι δύο προτάσεις έχουν τα ίδια αποτελέσµατα. ιακηρύττουν την µεταβλητή ch σαν µεταβλητή του τύπου char (χαρακτήρα) και της δίνουν αρχική τιµή το 65. Από τη στιγµή που αυτή είναι η ASCII τιµή για το Α, και αυτός ο χαρακτήρας µπορεί να χρησιµοποιηθεί για να αρχικοποιήσει το ch στο 65. 04 Τι σηµαίνει λάθος σε χρόνο εκτέλεσης (run time); ώστε παραδείγµατα δύο διαφορετικών λαθών κατά την εκτέλεση. Το λάθος σε χρόνο εκτέλεσης είναι ένα λάθος που συµβαίνει όταν το πρόγραµµα εκτελείται. Αριθµητική υπερχείλιση και διαίρεση µε το µηδέν είναι παραδείγµατα λαθών κατά την εκτέλεση. 05 Τι είναι το λάθος κατά τη µεταγλώττιση; ώστε παραδείγµατα δύο διαφορετικών λαθών κατά την µεταγλώττιση. Το λάθος κατά τη µεταγλώττιση είναι ένα λάθος το οποίο συµβαίνει όταν ένα πρόγραµµα µεταγλωττίζεται. 1

Παραδείγµατα: συντακτικά λάθη όπως παράλειψη ενός ερωτηµατικού, χρήση µιας µεταβλητής η οποία δεν έχει δηλωθεί, χρήση µιας λέξης κλειδιού για όνοµα µιας µεταβλητής. 06. Η οµαδοποίηση δεδοµένων και συναρτήσεων λέγεται ε. 07. Η ιδιότητα των κλάσεων να επεκτείνονται σε νέες κλάσεις λέγεται κ. 08. Η δυνατότητα µιας συνάρτησης ή ενός τελεστή να επενεργεί µε διαφορετικούς τρόπους σε διαφορετικούς τύπους δεδοµένων ονοµάζεται π. BΑΣΙΚΑ 09 Γράψτε µία απλή πρόταση σε C++, η οποία να εµφανίζει στην καθιερωµένη έξοδο τη φράση Πάρα πολλά όταν η µεταβλητή count περάσει το 100. If (count > 100) cout << Para polla ; 10. Ποιο αρχείο-κεφαλίδα πρέπει να συµπεριλάβετε µε την οδηγία #include ώστε να χρησιµοποιήσετε το χειριστή setw; Γράψτε µια εντολή που θα εµφανίσει τη µεταβλητή george σε ένα πεδίο πλάτους 10 χαρακτήρων. 11. Αν υποθέσουµε ότι η µεταβλητή i ξεκινάει µε την τιµή 20, τι θα τυπώσει στην έξοδο το επόµενο απόσπασµα κώδικα προγράµµατος; cout << i--; cout << ++i; LOOPS & DECISIONS 12 Τι λάθος υπάρχει στον κώδικα ; If (x = 0) cout << x << = 0 \n ; else cout << x <<! = 0 \n ; Ο προγραµµατιστής πιθανόν επεδίωκε να εξετάσει την συνθήκη (x==0). Αλλά χρησιµοποιώντας τελεστή ανάθεσης = αντί για τον τελεστή ισότητας == το αποτέλεσµα θα είναι ριζικά διαφορετικό από αυτό που αναµενόταν. Για παράδειγµα, εάν το x έχει την τιµή 22 αρχικά πριν από την συνθήκη if, τότε η συνθήκη if θα αλλάξει την τιµή του x σε 0. Επιπλέον, η συνθήκη (x=0) αποτιµάται σε 0, πράγµα που σηµαίνει «false», έτσι θα εκτελεστεί το κοµµάτι else, µε το µήνυµα!=0\n αναφέροντας ότι το x δεν είναι 0! 13 Κατασκευάστε λογική έκφραση, η οποία να αντιπροσωπεύει κάθε µία από τις παρακάτω συνθήκες : a) Η µεταβλητή score είναι µεγαλύτερη ή ίση από 80 αλλά µικρότερη από 90. b) Η µεταβλητή answer είναι N ή n. c) Η µεταβλητή n είναι άρτιος αριθµός και διάφορη του 8. 2

d) Ο χαρακτήρας ch είναι κεφαλαίο γράµµα. a) (score > = 80 && score < 90) b) (answer == N answer ==n ) c) (n %2 == 0 && n! = 8) d) (ch > = A && ch < = Z ) 14 Πως γίνεται ό έλεγχος µέσα στο σώµα µιας εντολής switch αν δεν υπάρχει η εντολή break µετά από µια εντολή case Οταν το case δεν περιλαµβάνει πρόταση break, ο έλεγχος συνεχίζει στην αµέσως επόµενη case και αυτό λέγεται διαπέρασµα (fall through). 15 Πώς αποτιµάται η παρακάτω έκφραση; (x < y? -1 : (x == y? 0 :1)); Η έκφραση αυτή αποτιµάται σε -1 εάν x < y, αποτιµάται σε 0 εάν x == y και τέλος αποτιµάται σε 1 εάν x > y. 16 Γράψτε µια απλή C++ πρόταση η οποία χρησιµοποιεί τελεστή συνθήκης (? : ) για να εκχωρήσει την απόλυτη τιµή της µεταβλητής x στην µεταβλητή absx. absx = (x > 0? x : -x); 17. Γράψτε ένα βρόχο for που να εµφανίζει τους αριθµούς από 100 ως 110. LOOPS & DECISIONS 18 Τι θα συµβεί, εάν σε έναν βρόχο while η συνθήκη ελέγχου είναι ψευδής (false) από την αρχή ; Εάν η συνθήκη ελέγχου σε έναν βρόχο while είναι αρχικά ψευδής, τότε ο βρόχος παρακάµπτεται, που σηµαίνει ότι οι προτάσεις µέσα στον βρόχο δεν εκτελούνται καθόλου. 19 Ποιος είναι ο ελάχιστος αριθµός επαναλήψεων Που µπορεί να κάνει ένας βρόχος while Που µπορεί να κάνει ένας βρόχος do-while; Ο ελάχιστος αριθµός επαναλήψεων Που µπορεί να κάνει ένας βρόχος while είναι καµία (0) Που µπορεί να κάνει ένας βρόχος do-while είναι µία (1) 20 Εντοπίστε το λάθος στο παρακάτω βρόχο επανάληψης n=50; while(n <= 100) sum += n * n; 3

ΣΥΝΑΡΤΗΣΕΙΣ Ο παραπάνω βρόχος επανάληψης είναι ατέρµονας, καθώς η τιµή της µεταβλητής n δεν αλλάζει πουθενά. 21. Μια συνάρτηση που δεν επιστρέφει τίποτε, έχει τύπο επιστροφής. 22. Γράψτε µια συνάρτηση µε όνοµα pow3 µε παράµετρο ένα ακέραιο n, που επιστρέφει τον κύβο του n. 23. Σωστό ή λάθος: Όταν καλείται µια συνάρτηση, το πλήθος και ο τύπος των ορισµάτων πρέπει να είναι αντίστοιχα µε τις τυπικές παραµέτρους της. 24. Ποιος είναι ο κύριος λόγος για τη µεταβίβαση ορισµάτων κατ' αναφορά; 25. Γράψτε πρόγραµµα που ζητάει δυο δεκαδικούς αριθµούς π.χ. 5.14 και 1.34, υπολογίζει το µέσο όρο τους, και εµφανίζει το αποτέλεσµα π.χ. 3.24 µε δυο δεκαδικά ψηφία (setprecision) καταλαµβάνοντας συνολικά δεκαέξι θέσεις στην οθόνη. ΠΙΝΑΚΕΣ 26 Τι τύπου µεταβλητή µπορεί να είναι ο αριθµοδείκτης ενός πίνακα, και ποιο, το εύρος τιµών που µπορεί να πάρει ; Ο αριθµοδείκτης ενός πίνακα πρέπει να είναι µια µεταβλητή τύπου integer, και το εύρος των τιµών που µπορεί να πάρει είναι από 0 (µηδέν) έως n-1. Όπου n το µέγεθος του πίνακα (αριθµός των στοιχείων του πίνακα). 27. Όλα τα στοιχεία σε έναν πίνακα πρέπει να έχουν τύπο δεδοµένων. 28. Γράψτε την εντολή που ορίζει έναν πίνακα ο οποίος ονοµάζεται manybirds και χωρά 50 αντικείµενα τύπου bird. bird maybirds[50]; 29. Τι αντιπροσωπεύει το όνοµα ενός πίνακα? ΕΙΚΤΕΣ 30 Πώς µπορούµε να έχουµε πρόσβαση σε διεύθυνση µνήµης µιας µεταβλητής; Εφαρµόζοντας τον τελεστή αναφοροποίησης (διευθυνσιοδότησης) & στη µεταβλητή αυτή (&x). 31 Εξηγήστε τη διαφορά ανάµεσα στις παρακάτω δύο δηλώσεις: α) int n1 = n; β) int& n2 = n; Η δήλωση int n1 = n; ορίζει το n1 να είναι ένα αντίγραφο του n. Είναι ένα διαφορετικό αντικείµενο το οποίο έχει την ίδια τιµή µε το n. Η δήλωση int& n2 = n; ορίζει το n2 να είναι συνώνυµο του n. Είναι το 4

ίδιο αντικείµενο µε το n µε την ίδια διεύθυνση. 32 Έκφρασε τη διαφορά µεταξύ των δύο παρακάτω χρήσεων του τελεστή αναφοροποίησης &: α) int& r = n; β) p = &n; Η δήλωση int& r = n; ορίζει το r να είναι αναφορά για την ακέραια µεταβλητή n. Η πρόταση r = &n; εκχωρεί τη διεύθυνση του n στον διευθυνσιοδείκτη p. 33. Με δεδοµένο ένα δείκτη p που δείχνει σε ένα αντικείµενο τύπου upperclass, γράψτε µια παράσταση που εκτελεί τη συνάρτηση-µέλος exclu() σε αυτό το αντικείµενο. upperclass->exclu() Strings 34 Τι εκτυπώνει ο παρακάτω κώδικας: char* s1 = ABCDE ; char* s2 = ABC ; if (strcmp(s1, s2) < 0) cout << s1 << < << s2 << endl; else cout << s1 << >= << s2 << endl; Εκτυπώνει : ABCDE >= ABC STRINGS 35 Ποια είναι η διαφορά µεταξύ ενός αλφαριθµητικού C-string κι ενός string στην C++; char cs [8] = ABCDEFG ; // cs is a C-string string s = ABCDEFG ; // s is a C++-string Ένα C-string είναι ένας πίνακας από χαρακτήρες που χρησιµοποιεί έναν null χαρακτήρα \0 για να δείξει το τέλος του string. Ένα C++ string είναι ένα αντικείµενο του οποίου ο τύπος ορίζεται µέσα στον φάκελο string.h (<string>) και το οποίο έχει ένα µεγάλο ρεπερτόριο από µεθόδους, όπως η length() και η replace(): char cs [8] = ABCDEFG ; // cs is a C-string string s = ABCDEFG ; // s is a C++-string cout << s << has << s.length()<< characters.\n ; s.replace(4, 2, yz ); // changes s to ABCDyzG 36 Τι είναι ένα ρεύµα δεδοµένων; Ένα ρεύµα δεδοµένων είναι ένα αντικείµενο το οποίο διαχειρίζεται την εισαγωγή και την εξαγωγή δεδοµένων µεταξύ ενός προγράµµατος και της πηγής ή του προορισµού των δεδοµένων. Η C++ επιτρέπει <iostream> αντικείµενα για I/O (cin και cout), 5

<fstream> αντικείµενα για εξωτερικούς φακέλους (αρχεία) και <sstream> αντικείµενα για εσωτερικούς φακέλους (ρεύµατα συµβολοσειρών). ΚΛΑΣΕΙΣ & ΑΝΤΙΚΕΙΜΕΝΑ 37 Εξηγήστε την διαφορά µεταξύ ενός δοµητή κι ενός αποδοµητή. Ένας δοµητής είναι µία µέθοδος κλάσης η οποία εκτελείται αυτόµατα όταν ένα αντικείµενο της κλάσης δηµιουργείται (κατασκευάζεται). Ένας αποδοµητής είναι µία µέθοδος κλάσης η οποία εκτελείται αυτόµατα όταν ένα αντικείµενο της κλάσης πεθαίνει (καταστρέφεται). 38 Εξηγήστε την διαφορά µεταξύ του εξ ορισµού (default) δοµητή και των υπολοίπων δοµητών. Ο default δοµητής είναι ο µόνος δοµητής ο οποίος δεν έχει παραµέτρους (ή εκείνος του οποίου όλες οι παράµετροι, έχουν default τιµές). Όταν δεν ορίζεται από τον προγραµµατιστή, ορίζεται αυτόµατα από τον µεταγλωττιστή. 39 Πόσους δοµητές µπορεί να έχει µία κλάση; εν υπάρχει όριο στον αριθµό των δοµητών, που µπορεί να έχει µία κλάση. Αλλά αφού πολλαπλοί δοµητές είναι υπερφορτωµένες µέθοδοι, πρέπει όλες να ξεχωρίζουν από τις υπογραφές τους. 40 Πόσους αποδοµητές µπορεί να έχει µία κλάση; Μία κλάση µπορεί να έχει µόνο έναν αποδοµητή. 41 Πως και γιατί χρησιµοποιείται ο τελεστής εµβέλειας (::)ή θέας και διακριτότητας στους ορισµούς των κλάσεων; Ο τελεστής θέας και διακριτότητας :: χρησιµοποιείται γενικά «για να επιλύσει εξωτερικές αναφορές». Χρησιµοποιείται στην ορισµό µίας κλάσης όποτε ο ορισµός µίας µεθόδου γίνεται έξω από την κλάση. 42. Γράψτε έναν ορισµό κλάσης που δηµιουργεί την κλάση leverage µε ένα ιδιωτικό µέλος δεδοµένων το crowbar τύπου int, και µια δηµόσια συνάρτηση που η δήλωση της είναι η void pry(). Γράψτε µια εντολή που να ορίζει ένα αντικείµενο µε όνοµα lever1 για την κλάση leverage που περιγράψατε πριν. Γράψτε µια εντολή που να εκτελεί τη συνάρτηση pry() στο αντικείµενο lever1, το οποίο περιγράφτηκε πριν. class leverage private: int crowbar;public:void pry(); Leverage lever1; lever1.pry(); YΠΕΡΦΟΡΤΩΣΗ -this 6

43 Σε τι αναφέρεται πάντα το *this; Η κλειδολέξη this είναι ένας δείκτης στο αντικείµενο που του ανήκει η κλήση της µεθόδου µέλους στην οποία η έκφραση εµφανίζεται. 44 Γιατί πρέπει οι τελεστές ρευµάτων << και >> να υπερφορτώνονται σαν συναρτήσεις friend Οι τελεστές << και >> πρέπει να υπερφορτωθούν ως friend συναρτήσεις, επειδή οι αριστεροί τελεστές τους πρέπει να είναι αντικείµενα stream. Ενώ εάν ένας υπερφορτωµένος τελεστής είναι µια µέθοδος, θα έπρεπε ο αριστερός τελεστής του να είναι *this, ένας pointer, δηλαδή σε αντικείµενο της κλάσης στην οποία η µέθοδος ανήκει. 45 Γιατί οι αριθµητικοί τελεστές +, -, *, και / υπερφορτώνονται σαν συναρτήσεις friend; Οι αριθµητικοί τελεστές +, -, *, και / πρέπει να υπερφορτωθούν ως friend συναρτήσεις, έτσι ώστε οι αριστεροί τελεστές τους να µπορούν να δηλωθούν ως const. Αυτό επιτρέπει, παραδείγµατος χάριν, τη χρήση µιας έκφρασης όπως η 22 + x. Εάν ένας υπερφορτωµένος τελεστής είναι µέθοδος, τότε ο αριστερός τελεστής του είναι *this, ο οποίος βέβαια δεν µπορεί να είναι const. 46. Πόσα ορίσµατα απαιτούνται για τον ορισµό ενός µονοµελούς υπερφορτωµένου τελεστή; 47. Σωστό ή λάθος: Ο µεταγλωττιστής δεν θα έχει αντίρρηση αν υπερφορτώσετε τον τελεστή * για να εκτελέσετε διαίρεση. 48. Γράψτε µια εντολή που θα µπορεί να τη χρησιµοποιήσει µια συνάρτηση-µέλος για να επιστρέψει ολόκληρο το αντικείµενο του οποίου είναι µέλος, χωρίς να δηµιουργήσει κανένα προσωρινό αντικείµενο. return (*this) ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ 49 Ποια είναι η διαφορά µεταξύ προστατευµένων (protected) και ιδιωτικών (private) µελών; Ένα ιδιωτικό (private) µέλος είναι µη προσβάσιµο από οπουδήποτε έξω από τα καθορισµένα όρια της κλάσης και δεν κληρονοµείται. Ένα προστατευµένο (protected) µέλος είναι µη προσβάσιµο από οπουδήποτε έξω από τα καθορισµένα όρια της κλάσης, όπως ένα ιδιωτικό, αλλά κληρονοµείται, δηλαδή είναι προσβάσιµο από τα καθορισµένα όρια των παραγόµενων κλάσεων. 50 Πώς συµπεριφέρονται οι εξ ορισµού (default) δοµητές και αποδοµητές, σε µια ιεραρχία κληρονοµιών; Σε µια ιεραρχία κληρονοµιών, κάθε εξ ορισµού δοµητής (default constructor) 7

καλεί τον εξ ορισµού δοµητή (default constructor) του γονέα του, προτού να εκτελεσθεί, και κάθε αποδοµητής(destructor) καλεί τον αποδοµητή του γονέα του µετά την εκτέλεσή του. Το αποτέλεσµα είναι ότι όλοι οι default δοµητές γονέων εκτελούνται µε σειρά από πάνω προς τα κάτω, και όλοι οι αποδοµητές γονέων εκτελούνται µε σειρά από κάτω προς τα επάνω. 51 Τι είναι µια εικονική συνάρτηση µέλος (virtual member function) (εικονική µέθοδος); Μια εικονική µέθοδος είναι µια µέθοδος που µπορεί να αγνοηθεί σε µια παραγόµενη υποκλάση. 52 Τι είναι µια αµιγής εικονική συνάρτηση µέλος (pure virtual member function) (αµιγής εικονική µέθοδος); Μια αµιγής εικονική συνάρτηση µέλος, είναι µια εικονική µέθοδος που δεν µπορεί να κληθεί άµεσα, δεν έχει κώδικα, µόνο οι υπερκαλύπτουσες (overridden) µέθοδοι, στις παραγόµενες κλάσεις, µπορούν να κληθούν. Μια καθαρή εικονική µέθοδος αναγνωρίζεται από τον αρχικοποιητή (initializer) =0 στο τέλος της δήλωσής της. 53 Που είναι το λάθος στους ακόλουθους ορισµούς: class X protected: int a; ; class Y : public X public: void set(x x, int c) x. a = c; ; Το προστατευµένο µέλος δεδοµένων a µπορεί να προσπελαθεί µόνο από το τρέχον αντικείµενο της παραγόµενης κλάσης Υ (δηλαδή δεν χρειάζεται να περαστεί σαν παράµετρος µιας και το a είναι ορατό στην Y). Οποιοδήποτε άλλο αντικείµενο x της κλάσης Υ δεν µπορεί να έχει πρόσβαση στο a. 54. Γράψτε τη δήλωση µιας συνάρτησης δόµησης χωρίς ορίσµατα για την παράγωγη κλάση Bosworth, η οποία θα καλεί τη συνάρτηση δόµησης χωρίς ορίσµατα της βασικής κλάσης Alphonso. Bosworth():Alphonso() 55. Γράψτε την πρώτη γραµµή του προσδιοριστικού της κλάσης Tire που προκύπτει από την κλάση Wheel και την κλάση Rubber. class Tire :public Wheel,public Rubber 56. Θεωρήστε την κλάση Derv που παράγεται από τη βασική κλάση Base. Και οι δύο κλάσεις περιέχουν µια συνάρτηση-µέλος func( ) που δεν δέχεται ορίσµατα. 8

Γράψτε µια εντολή που θα περιέχεται σε µια συνάρτηση-µέλος της Derv και θα καλεί τη συνάρτηση func() της βασικής κλάσης. Base::func(); 57. Σωστό ή λάθος: Ένας δείκτης προς µια βασική κλάση µπορεί να δείχνει σε αντικείµενα µιας παράγωγης κλάσης. 58. Γράψτε τον ορισµό ενός πίνακα 10 δεικτών προς αντικείµενα της κλάσης dong, ο οποίος θα ονοµάζεται parr. dong* parr[10]; 59. Γράψτε τη δήλωση µιας συνάρτησης δόµησης αντιγράφου για µια κλάση που ονοµάζεται Bertha. Bertha(bertha& b); 60. Εξηγήστε τη διαφορά στη λειτουργία µεταξύ αυτών των δύο εντολών: person p1(p0); person p1=p0; Είναι ίδιες AΣΚΗΣΕΙΣ 61.Γράψτε ένα µικρό πρόγραµµα το οποίο σας δίνει 5 προσπάθειες για να µαντέψετε ένα κρυµµένο γράµµα π.χ. το γράµµα d. 62.Γράψτε µια συνάρτηση sumzaria, που επιστρέφει το άθροισµα από 2 ζάρια (ζαριά τυχαία). Για τις ζαριές µπορείτε να έχετε τυχαίες τιµές (από 1..6) µε την έκφραση (1+rand()%6). Ενηµερώστε για τη ζαριά, τι φέρατε δηλαδή. Κατόπιν καλέστε την sumzaria από το πρόγραµµα main(), και ελένξτε το αποτέλεσµα της ζαριάς για να τυπώσετε κάποια µηνύµατα όπως αν το άθροισµα είναι 7,11 κερδίζεις αν το άθροισµα είναι 2,3,12 χάνεις 63.Ορίστε µια κλάση bar, που αντιπροσωπεύει µια µπάρα γραφικών και χρησιµοποιεί την έτοιµη συνάρτηση void draw_rectangle(int left, int top, int right, int bottom) για να την σχεδιάσει. 64.Γράψτε ένα πρόγραµµα, στο οποίο ο χρήστης πληκτρολογεί 10 ακεραίους οι οποίοι αποθηκεύονται σε ένα πίνακα int A[10]. Κατόπιν γράψτε µια συνάρτηση int MaxInt(int* ptra, int n), η οποία θα διατρέχει ένα πίνακα αναζητώντας τον µεγαλύτερο αριθµό. Ως ορίσµατα έχει την διεύθυνση του πίνακα και το πλήθος των στοιχείων που υπάρχουν σε αυτόν, και θα επιστρέφει τον αριθµοδείκτη του µεγαλύτερου στοιχείου. Καλέστε την από το πρόγραµµά σας για να εµφανίσετε το µεγαλύτερο στοιχείο του πίνακα Α. 65. ηµιουργείστε µια βασική κλάση Base, µε ένα protected χαρακτηριστικό τον ακέραιο secret. Κατόπιν δηµιουργείστε δυο κλάσεις που παράγονται από την Base µια µε δηµόσια πρόσβαση PubDerived, και µια µε ιδιωτική PriDerived. Τυπώστε το secret από αντικείµενα και των 3 κλάσεων. 66. ηµιουργείστε µια δική σας κλάση πίνακα ακεραίων µε χαρακτηριστικά int*ptr :δείκτης προς τα περιεχόµενα του πίνακα και int size : µέγεθος του πίνακα, µε συνάρτηση δόµησης ενός ορίσµατος και µε υπερφορτωµένο τελεστή []. Κατόπιν 9

προστέστε και έναν υπερφορτωµένο τελεστή απόδοσης τιµής και υπερφοτωµένο δοµητή αντιγράφου. 67. Γράψτε ένα πρότυπο για µια συνάρτηση η οποία θα επιστρέφει το όρισµα της πολλαπλασιασµένο επί 2. 68. Γράψτε τις προδιαγραφές µιας κλάσης χειρισµού εξαιρέσεων X η οποία θα αποθηκεύει έναν αριθµό σφάλµατος int xnum και το όνοµα του σφάλµατος char xname[max]. Συµπεριλάβετε µια συνάρτηση δόµησης. 69. Τι τυπώνουν τα παρακάτω προγράµµατα //1. # include <iostream> void fp(char v[]); int main () char k[]="hello!!!!"; fp(k); system("pause"); return 0; void fp(char v[]) for (char* p = v; *p!=0; p++) std::cout << *p; ------------------- //2. # include <iostream> void first( int& n); int main () int k=10; first(k); std::cout<<k; system("pause"); return 0; void second(int& n); void first( int& n) int temp=n*3; 10

second (n); temp+=n; void second (int& n) n+=1; ------------------- //3. #include <iostream> using std::cout; using std::endl; class Count public: int x; void print() cout << x << endl; ; int main() Count counter; Count *counterptr = &counter; Count& counterref = counter; counter.x = 1; counter.print(); counterref.x = 2; counterref.print(); counterptr->x = 3; counterptr->print(); counter.print(); system("pause"); return 0; ------------------- //4. #include <stdio.h> # include <iostream> class Class1 private: int a; friend void foo (Class1& a, int f) f+=2;a.a=f; public: Class1():a(2); Class1(int f) a=(int)f;; void out() std::cout<<a<<"\n"; ; int main () 11

Class1 C; C.out(); foo(c,7); C.out(); system("pause"); return 0; ------------------- //5. #include <stdio.h> # include <iostream> class Class1 private: int a; public: Class1 ():a(3); Class1(int f)a=(int)f;; void operator ()(int x, int y) if (x>y) a=x-y; else a=y-x; void operator ()(int x, int y, int z) if (x>y) a=(x-y)*z; else a=(y-x)*z; void print () std::cout<<a<<"\n"; ; int main () Class1 C; C.print(); C(2,3); C.print(); C(2,3,5); C.print(); C=Class1(7); C.print(); system("pause"); return 0; 12