Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Σχετικά έγγραφα
Προγραμματισμός ΙΙ Ενότητα 5:

Προγραμματισμός ΙΙ. Ενότητα 8: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 4:

Προγραμματισμός ΙΙ. Ενότητα 7: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 1: Προαπαιτούμενα. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 6: Βιβλιοθήκες - Μέρος 1. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 4: Διαχείριση μνήμης. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ Ενότητα 3:

Προγραμματισμός ΙΙ Ενότητα 5:

Προγραμματισμός ΙΙ. Ενότητα 8: Βιβλιοθήκες - Μέρος 2. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 2: Επανάληψη στον Προγραμματισμό Ι. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός ΙΙ. Ενότητα 10: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 2 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Προγραμματισμός ΙΙ. Ενότητα 3: Βασικοί τύποι δεδομένων. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 5: Κληρονομικότητα. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Εισαγωγή στους Αλγορίθμους

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

Δομές Δεδομένων Ενότητα 1

Προγραμματισμός ΙΙ Ενότητα 6:

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Εισαγωγή στους Αλγορίθμους

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Βάσεις Δεδομένων. Ενότητα 1: Εισαγωγή στις Βάσεις δεδομένων. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 9: Ειδικά θέματα γλώσσας C/C++. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Δομές Δεδομένων. Ενότητα 2: Περισσότερα για τους δείκτες. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

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

Προγραμματισμός H/Y Ενότητα 3: Πίνακες αριθμών και χαρακτήρων. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στους Αλγορίθμους

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Διοικητική Λογιστική

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

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

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μηχανολογικό Σχέδιο Ι

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Λογιστική Κόστους Ενότητα 10: Ασκήσεις Προτύπου Κόστους Αποκλίσεων.

Προγραμματισμός H/Y Ενότητα 7: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

ΑΝΤΙΡΡΥΠΑΝΤΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΑΙΩΡΟΥΜΕΝΩΝ ΣΩΜΑΤΙΔΙΩΝ Ενότητα 2: Αιωρούμενα σωματίδια & Απόδοση συλλογής Αν. Καθ. Δρ Μαρία Α. Γούλα Τμήμα Μηχανικών

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

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

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 1: Εκτιμητές και Ιδιότητες. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

Οργάνωση και Διοίκηση Πωλήσεων Ενότητα 1: Ο ΡΟΛΟΣ ΤΩΝ ΠΩΛΗΣΕΩΝ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΣΤΡΑΤΗΓΙΚΗΣ ΜΑΡΚΕΤΙΝΓΚ

ΑΝΑΛΥΣΗ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΩΝ ΚΑΤΑΣΤΑΣΕΩΝ

Οικονομετρία Ι. Ενότητα 10: Διαγνωστικοί Έλεγχοι. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Οικονομετρία Ι. Ενότητα 3: Θεώρημα των Gauss Markov. Δρ. Χαϊδώ Δριτσάκη Τμήμα Λογιστικής & Χρηματοοικονομικής

ΗΛΕΚΤΡΟΤΕΧΝΙΑ-ΗΛΕΚΤΡΟΝΙΚΗ ΕΡΓΑΣΤΗΡΙΟ

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Τεχνολογία Πολυμέσων. Ενότητα 8: Pool Table. Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Ηλεκτροτεχνία ΙΙ. Ενότητα 2: Ηλεκτρικά κυκλώματα συνεχούς ρεύματος. Δημήτρης Στημονιάρης, Δημήτρης Τσιαμήτρος Τμήμα Ηλεκτρολογίας

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

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

Εισαγωγικές έννοιες θεωρίας Συστημάτων Αυτομάτου Ελέγχου

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Συστήματα Αναμονής. Ενότητα 3: Στοχαστικές Ανελίξεις. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Νέες Τεχνολογίες και Καλλιτεχνική Δημιουργία

Συστήματα Αναμονής. Ενότητα 5: Ανέλιξη Poisson. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Ιστορία της μετάφρασης

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Οργάνωση και Διοίκηση Πωλήσεων

ΕΡΓΑΣΤΗΡΙΟ ΦΥΣΙΚΗΣ Ι ΘΕΩΡΙΑ ΣΦΑΛΜΑΤΩΝ. Κανονισμός Μαθήματος και Εργαστηρίου Καθηγήτρια Γεωργά Σταυρούλα Τμήμα Φυσικής

Transcript:

Προγραμματισμός ΙΙ Ενότητα 9: Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1 Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Πρότυπες συναρτήσεις και πρότυπες κλάσεις - Μέρος 1

Σκοποί ενότητας Η ενότητα αυτή, ασχολείται με το ζήτημα των πρότυπων συναρτήσεων και των πρότυπων κλάσεων. 5

Περιεχόμενα ενότητας Πρότυπες συναρτήσεις. Χωρίς πρότυπες συναρτήσεις. Με πρότυπες συναρτήσεις. Βιβλιογραφία. 6

Πρότυπες συναρτήσεις Ας υποθέσουμε ότι χρειάζεται να υλοποιήσουμε μια συνάρτηση που επιστρέφει την ελάχιστη τιμή των δύο παραμέτρων της. Θέλουμε να δούμε πώς είναι ο κώδικας χωρίς αλλά και με πρότυπες συναρτήσεις. Ας δούμε την πρώτη περίπτωση, όπου η συνάρτηση πρέπει να υλοποιηθεί ώστε να χρησιμοποιούνται διαφορετικοί τύποι δεδομένων. 7

Χωρίς πρότυπες συναρτήσεις (1/10) Το παρακάτω πρόγραμμα δείχνει πώς θα αντιμετωπίζαμε τη χρήση διαφορετικών συναρτήσεων όσον αφορά τους τύπους δεδομένων στους οποίους επενεργούν, αλλά με τον ίδιο αλγόριθμο. #include <iostream> using namespace std; int MinInt(int a, int b) { if ( a < b ) return ( a ); else return ( b ); } // MinInt 8

Χωρίς πρότυπες συναρτήσεις (2/10) int MaxInt(int a, int b) { if ( a > b ) return ( a ); else return ( b ); } // MaxInt 9

Χωρίς πρότυπες συναρτήσεις (3/10) float MinFloat(float a, float b) { if ( a < b ) return ( a ); else return ( b ); } // MinFloat 10

Χωρίς πρότυπες συναρτήσεις (4/10) float MaxFloat(float a, float b) { if ( a > b ) return ( a ); else return ( b ); } // MaxFloat 11

Χωρίς πρότυπες συναρτήσεις (5/10) void main() { cout << " cout << " MinInt(5, 10) = " << MinInt(5, 10) << endl; MaxInt(5, 10) = " << MaxInt(5, 10) << endl; cout << "MinFloat(3.14f, 2.718f) = " << MinFloat(3.14f, 2.718f) << endl; cout << "MaxFloat(3.14f, 2.718f) = " << MaxFloat(3.14f, 2.718f) << endl; } // main 12

Χωρίς πρότυπες συναρτήσεις (6/10) Στο παράδειγμα αυτό μπορείτε να δείτε ότι οι συναρτήσεις που υπολογίζουν τον ελάχιστο δύο αριθμών (ακεραίων και κινητής υποδιαστολής απλής ακρίβειας) διαφέρουν μόνο στην επικεφαλίδα τους. Οι διαφορές περιορίζονται στο όνομα της συνάρτησης, στους τύπους των ορισμάτων τους, και στον επιστρεφόμενο τύπο. Ο κώδικάς τους είναι πανομοιότυπος. Το ίδιο ακριβώς συμβαίνει και για τον υπολογισμό του μέγιστου δύο αριθμών. 13

Χωρίς πρότυπες συναρτήσεις (7/10) Είναι προφανές ότι αυτός ο τρόπος αντιμετώπισης του παραπάνω προβλήματος δεν είναι πρακτικός, διότι: 1. Η επανάληψη κώδικα είναι σπάταλη αλλά και επικίνδυνη. Δημιουργείται περισσότερος εκτελέσιμος κώδικας, αλλά το χειρότερο είναι η συντήρηση του πηγαίου κώδικα. Στην περίπτωση που αλλάξει ο πηγαίος κώδικας μίας συνάρτησης (π.χ. διόρθωση ενός σφάλματος), το ίδιο πρέπει να γίνει και στις υπόλοιπες συναρτήσεις που έχουν, πρακτικά, τον ίδιο κώδικα, αλλά λειτουργούν με διαφορετικούς τύπους. 14

Χωρίς πρότυπες συναρτήσεις (8/10) 2. Κάθε φορά που χρειάζεται μια, ουσιαστικά ίδια, συνάρτηση που λειτουργεί με κάπως διαφορετικό τρόπο, τότε πρέπει να γραφτούν οι ίδιες συναρτήσεις ξανά. Αυτό χειροτερεύει το παραπάνω πρόβλημα, αλλά ταυτόχρονα εισάγει κι ένα επιπλέον:. Τι θα γινόταν αν έπρεπε να συγκρίνουμε για ελάχιστο δύο σύνθετους τύπους (π.χ. εγγραφές φοιτητών βάσει του Αριθμού Μητρώου (ΑΜ));. Σε αυτήν την περίπτωση ο κώδικας περιπλέκεται ακόμη περισσότερο. 15

Χωρίς πρότυπες συναρτήσεις (9/10) 3. Στη συζήτησή μας δε θα αναφερθούμε στη χρήση της προεπεξεργασίας (#define) που δίνουν οι μεταγλωττιστές. Στη συγκεκριμένη περίπτωση γίνεται αντικατάσταση κειμένου σε επίπεδο προεπεξεργαστή, με τα προβλήματα που συνοδεύουν τη συγκεκριμένη προσέγγιση. Τα προβλήματα αυτά ξεφεύγουν από τη θεματολογία του παρόντος μαθήματος, αλλά σε περίπτωση που θέλετε να μάθετε περισσότερα, αναζητήστε με βάση τον όρο «C preprocessor abuse» ή τον όρο «C preprocessor problems». Ουσιαστικά αναμιγνύετε μια παλιά πρακτική της C χωρίς να λαμβάνετε υπόψη τις σύγχρονες δυνατότητες των αντικειμενοστρεφών γλωσσών. Η εκτέλεση του παραπάνω κώδικα φαίνεται παρακάτω. 16

Χωρίς πρότυπες συναρτήσεις (10/10) Εικόνα 1: Αποτέλεσμα εκτέλεσης του προγράμματος. Πηγή: Διδάσκων (2015). 17

Με πρότυπες συναρτήσεις (1/12) Εδώ καλούμαστε να λύσουμε το παραπάνω πρόβλημα, δηλαδή:. Ο αλγόριθμος των συναρτήσεων που εκτελούν την ίδια λειτουργία πρέπει να υπάρχει μόνο μία φορά, αλλά να μπορούμε να τον χρησιμοποιήσουμε με διαφορετικούς τύπους δεδομένων, όποτε χρειαστεί. Αυτό γίνεται με τη βοήθεια πρότυπων συναρτήσεων. 18

Με πρότυπες συναρτήσεις (2/12) Παρακάτω μπορείτε να δείτε ολόκληρο το πρόγραμμα, που αυτήν τη φορά είναι πιο απλό, χρησιμοποιώντας πρότυπες συναρτήσεις. Ο κώδικας στη main έχει κάπως απλοποιηθεί, αφού αποφύγαμε τα int και float στα ονόματα των συναρτήσεων. Θα παρατηρήσετε ότι η συνάρτηση Min δηλώνεται και υλοποιείται μία μόνο φορά, όπως ακριβώς και η Max. 19

Με πρότυπες συναρτήσεις (3/12) #include <iostream> using namespace std; /* ---------------------------------------------------*/ template <class T> T Min(const T &a, const T &b) { if ( a < b ) return ( a ); else return ( b ); } // Min 20

Με πρότυπες συναρτήσεις (4/12) template <class T> T Max(const T &a, const T &b) { if ( a > b ) return ( a ); else return ( b ); } // Max 21

Με πρότυπες συναρτήσεις (5/12) void main() { cout <<" Min(5, 10) = " << Min(5, 10) << endl; cout <<" Max(5, 10) = " << Max(5, 10) << endl; cout <<"Min(3.14f, 2.718f) = " << Min(3.14f, 2.718f) <<endl; cout <<"Max(3.14f, 2.718f) = "<< Max(3.14f, 2.718f)<< endl; } // main 22

Με πρότυπες συναρτήσεις (6/12) Είναι εμφανές ότι τώρα το πρόγραμμα είναι συντομότερο και επικεντρωνόμαστε στον υπολογισμό του ελάχιστου και μεγαλύτερου, και όχι στις διαφορετικές υλοποιήσεις βάσει τύπου. Στη συνάρτηση main βλέπουμε ότι καλούμε την κάθε μία συνάρτηση με διαφορετικό τύπο και όχι διαφορετικό όνομα. Το όνομα της συνάρτησης είναι πάντοτε το ίδιο, ενώ αλλάζουν μόνο οι τύποι. Η εκτέλεση του παραπάνω προγράμματος φαίνεται στο παρακάτω σχήμα. 23

Με πρότυπες συναρτήσεις (7/12) Εικόνα 2: Αποτέλεσμα εκτέλεσης του προγράμματος. Πηγή: Διδάσκων (2015). 24

Με πρότυπες συναρτήσεις (8/12) Με τη χρήση πρότυπων συναρτήσεων μπορεί να προκύψουν κάποιες επιπλοκές. Τι θα γίνει αν στην παραπάνω συνάρτηση δοθούν ορίσματα δύο διαφορετικών τύπων (π.χ. ένας int και ένας float);. Επειδή η δήλωση μέσα στα < και > περιέχει μόνο έναν τύπο (τον Τ), θα προκύψει σφάλμα κατά τη μεταγλώττιση. 25

Με πρότυπες συναρτήσεις (9/12) Αν θέλουμε σε μια πρότυπη συνάρτηση ή κλάση (που θα δούμε σε λίγο) να χρησιμοποιήσουμε παραπάνω από ένα γενικό τύπο, αυτό μπορεί να γίνει να παραθέσουμε τους διαφορετικούς τύπους, διαχωρισμένους με κόμμα, ως εξής (οι... δεν είναι μέρος της σύνταξης και υποδηλώνουν ότι μπορούν να προστεθούν επιπλέον ονόματα):. template <class X, class Y, class Z,...> 26

Με πρότυπες συναρτήσεις (10/12) Μπορεί να προκύψει ένα ακόμη πρόβλημα. Τι θα γίνει αν περάσουμε δύο ορίσματα διαφορετικού τύπου που ο μεταγλωττιστής δεν μπορεί να καταλάβει (π.χ. float και double);. Αν ο μεταγλωττιστής δεν μπορεί να καταλάβει αν χρησιμοποιείτε τον ένα ή τον άλλο τύπο επειδή η τιμή τους αντιστοιχεί σε παραπάνω από ένα θεμελιώδη τύπο, τότε θα προκληθεί σφάλμα κατά τη μεταγλώττιση. Τέλος, υπάρχει μία ακόμη λεπτομέρεια. 27

Με πρότυπες συναρτήσεις (11/12) Ο παραπάνω κώδικας μπορεί να μεταγλωττιστεί επιτυχώς με οποιονδήποτε θεμελιώδη τύπο. Τι θα συμβεί, όμως, αν κατά την κλήση μιας πρότυπης συνάρτησης περάσουμε ορίσματα άλλου τύπου (π.χ. σύνθετου, όπως η εγγραφή ενός φοιτητή, ή ένα διάνυσμα); Στον κώδικα της πρότυπης συνάρτησης γίνεται σύγκριση για μικρότερο ή μεγαλύτερο. Επειδή κατά την κλήση τα a και b θα αντικατασταθούν με τα πραγματικά ορίσματα και ο τύπος των ορισμάτων τώρα πια θα συγκεκριμενοποιηθεί, θα γίνει προσπάθεια σύγκρισης δύο σύνθετων τύπων. 28

Με πρότυπες συναρτήσεις (12/12) Αν ο αντίστοιχος τελεστής σύγκρισης του συγκεκριμένου σύνθετου τύπου δεν έχει υπερφορτωθεί (όπως έχουμε δει σε προηγούμενη ενότητα), το πρόγραμμα θα παρουσιάσει σφάλμα κατά τη μεταγλώττιση, αναφέροντας ότι δεν έχει γίνει υπερφόρτωση του αντίστοιχου τελεστή ώστε να μπορεί να πραγματοποιηθεί η σύγκριση. Σε αυτήν την περίπτωση πρέπει να υπερφορτωθεί ο αντίστοιχος τελεστής του αντίστοιχου τύπου (αντίστοιχης κλάσης). 29

Βιβλιογραφία (1/10) 1. Alexandrescu A. (2001) Modern C++ design: generic programming and design patterns applied. USA, Addison-Wesley Publishing Company. 323 pp. ISBN-13 978-0-201-70431-0. ( 22.85, 27,42). 2. Bennett S, McRobb S and R Farmer. (2002) Object-oriented systems analysis and design using UML. 2nd Edition. McGraw- Hill Education. ISBN 0-07-709864-1. 3. Booch G, Maksimchuk RA, Engle MW, Young BJ, Conallen J and Houston KA. (2007) Object-oriented analysis and design with applications. 3rd ed. USA, Addison-Wesley. 691 pp. ISBN10 0-201-89551-X. ISBN13 978-0-201-89551-3. ( 43.44, 52.56). 30

Βιβλιογραφία (2/10) 4. Carrano FM and Henry T. (2013) Data abstraction and problem solving with C++: walls and mirrors. 6th ed. UK, Pearson Education Limited. 833 pp. ISBN10 0-273-76841-7, ISBN13 978-0-76841-8. 5. Deitel HM and Deitel PJ. (2010) C++ προγραμματισμός. 6η Έκδοση. Ελλάδα, Εκδόσεις Μ. Γκιούρδα. 1448 σελ. ISBN13 978-960-512-591-2. 6. Fowler M. (1999) Refactoring: improving the design of existing code. USA, Addison Wesley Longman, Inc. 431 pp. ISBN13 978-0-201-48567-7. ( 38.62, 49.05). 31

Βιβλιογραφία (3/10) 7. Fowler M. (2004) UML distilled: a brief guide to the standard object modeling language. 3rd ed. USA, Pearson Education, Inc. 175 pp. ISBN13 978-0-321-19368-1. ( 30.10, 38.23). 8. Kruse RL and Ryba AJ. (1999) Data structures and program design in C++. USA, Prentice Hall. 717 pp. ISBN 0-13- 082640-5. ( 40.74). 9. Lafore R. (2006) Αντικειμενοστρεφής προγραμματισμός με τη C++. Ελλάδα, Εκδόσεις Κλειδάριθμος. 1040 σελ. ISBN10 960-209-904-6. 32

Βιβλιογραφία (4/10) 10. Lafore, R. (2002) Object-oriented programming in C++. 4th ed. USA, Sams Publishing. 1012 pp. ISBN-10 0-672-32308-7. ISBN-13 978-0-672-32308-9. ( 29.60, 33.35). 11. Lakos, J. (1996) Large-Scale Software Design in C++. USA, Addison-Wesley. 852 pp. ISBN-10 0-201-63362-0. ISBN-13 978-0-201-63362-7. ( 26.26, 30.20). 12. MacLennan BJ. (1987) Principles of programming languages: design, evaluation, and implementation. 2nd ed. USA, CBS College Publishing. 568 pp. ISBN 0-03-021999-X. ( 8.00). 33

Βιβλιογραφία (5/10) 13. Martin RC. (2012) Agile software development: principles, patterns, and practices. USA, Pearson Education, Inc. 529 pp. ISBN10 0-13-276068-4. ISBN13 978-0-13-276058-4. ( 54.21, 65.59). 14. McConnell S. (1993) Code complete: a practical handbook of software construction. USA, Microsoft Press. 857 pp. ( 25.99). 15. McConnell S. (1996) Rapid development: taming wild software schedules. USA, Microsoft Press. 647 pp. ISBN 1-55615-900-5. ( 25.99). 34

Βιβλιογραφία (6/10) 16. McConnell S. (2004) Professional software development: shorter schedules, higher quality products, more successful projects, enhanced careers. USA, Addison-Wesley. 243 pp. ISBN 0-321-19367-9. ( 19.79, 29.08). 17. McDermid J, ed. (1991) Software engineer s reference book. Great Britain, Butterworth-Heinemann Ltd. 1140 pp. ISBN 0-7506-0813-7. ( 40.00). 18. Meyers S. (1996) More effective C++: 35 new ways to improve your programs and designs. USA, Addison-Wesley. 318 pp. ISBN 0-201-63371-X. ( 25.29, 36.90). 35

Βιβλιογραφία (7/10) 19. Meyers S. (2005) Effective C++: 55 specific ways to improve your programs and designs. 3rd ed. USA, Pearson Education, Inc. 297 pp. ISBN 0-321-33487-6. ( 18.52, 27.01). 20. Pressman RS. (2005) Software engineering: a practitioner s approach. 6th int. ed. Singapore, McGraw-Hill. 912 pp. ISBN 007-123840-9. ( 45.06, 65.83). 21. Reddy M. (2011) API design for C++. USA, Morgan Kaufmann Publishers. 441 pp. ISBN13 978-0-12-385003-4. ( 28.01, 32.21). 22. Sahni S. (2004) Δομές δεδομένων, αλγόριθμοι, και εφαρμογές στη C++. Ελλάδα/ΗΠΑ, Εκδόσεις Τζιόλα/McGraw-Hill. 852 σελ. ISBN10 960-418-030-4. ( 66.56). 36

Βιβλιογραφία (8/10) 23. Savitch W and Mock K. (2013) Πλήρης C++. 4η Έκδοση. Ελλάδα, Εκδόσεις Τζιόλα. 1024 σελ. ISBN13 978-960-418-358-6. ( 76.14). 24. Savitch W. (2015) Java: and introduction to problem solving and programming. 7th ed. USA, Pearson Education, Inc. 989 pp (+204 pp web chapters). ISBN10 0-13-376626-8. ISBN13 978-0- 376626-4. ( 83.99, 97.85 104.75, $122.68). 25. Schildt H. (2000) Ο οδηγός της C++. 3η Έκδοση, Εκδόσεις Μ. Γκιούρδα. 748 σελ. ISBN10 960-512-229-4. ( 29.00). 26. Schildt H. (2004) Μάθετε τη C++ από το μηδέν. 3η Έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 660 σελ. ISBN10 960-209-731-0. ( 46.90). 37

Βιβλιογραφία (9/10) 27. Sommerville I. (2004) Software Engineering. 7th ed. USA, Addison-Wesley. 759 pp. ISBN 0-321-21026-3. ( 40.95, 60.17). 28. Stroustrup B. (2000) The C++ programming language. Special Edition. USA, Addison-Wesley Longman, Inc. 1020 pp. ISBN 0-201-70073-5. ( 37.20, 54.26). 29. Sutter H and Alexandrescu A. (2005) C++ coding standards: 101 rules, guidelines, and best practices. USA, Pearson Education, Inc. 220 pp. ISBN10 0-321-11358-6. ISBN13 978-0-321-11358-0. ( 19.71, 22.67). 38

Βιβλιογραφία (10/10) 30. Sutter H. (2000) Exceptional C++: 47 engineering puzzles, programming problems, and solutions. USA, Addison- Wesley Longman, Inc. 215 pp. ISBN10 0-201-61562-2. ISBN13 978-0-201-61562-3. ( 24.32, 27.97). 31. Sutter H. (2002) More exceptional C++: 40 new engineering puzzles, programming problems, and solutions. USA, Pearson Education, Inc. 279 pp. ISBN10 0-201-70434-X. ISBN13 978-0-201-70434-1. ( 28.05, 32.26). 32. Χατζηγιαννάκης ΝΜ. (2014) Η γλώσσα C++ σε βάθος. 2η αναθεωρημένη έκδοση. Ελλάδα, Εκδόσεις Κλειδάριθμος. 974 σελ. ISBN13 978-960-461-620-6. ( 89.00). 39

Σημείωμα Αναφοράς Copyright ΤΕΙ Δυτικής Μακεδονίας, Σίσιας Γεώργιος. «Προγραμματισμός ΙΙ». Έκδοση: 1.0. Κοζάνη 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: 40

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 41

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 42