This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
cpp:function_templates [2019/05/02 13:43] gthanos created |
cpp:function_templates [2021/06/04 17:29] gthanos |
||
|---|---|---|---|
| Line 26: | Line 26: | ||
| Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | ||
| - | <code cpp maximum1.cpp> | + | <code cpp find_max1.cpp> |
| + | template < | ||
| + | T& maximum(T& | ||
| + | |||
| + | #include < | ||
| + | using namespace std; | ||
| + | |||
| + | int main() { | ||
| + | int a = 5, b = 10; | ||
| + | double d = 5.5, f=3.3; | ||
| + | cout << " | ||
| + | cout << " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Μία // | ||
| + | </ | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Μπορείτε να παραλείψετε τον τύπο των παραμέτρων κατά την κλήση της συνάρτησης **maximum** ως εξής: | ||
| + | <code cpp find_max1.cpp> | ||
| template < | template < | ||
| T& maximum(T& | T& maximum(T& | ||
| Line 40: | Line 61: | ||
| } | } | ||
| </ | </ | ||
| + | Ο λόγος είναι ότι ο // | ||
| + | </ | ||
| + | |||
| + | ===== Templates συναρτήσεων με παραμέτρους σύνθετους τύπους (κλάσεις) ===== | ||
| + | |||
| + | Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση //Student// του φοιτητή δίνεται στην προηγούμενη ενότητα: | ||
| + | |||
| + | Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή %%>%% το πρόγραμμα εκτυπώνει τα εξής: | ||
| + | <code cpp find_max2.cpp> | ||
| + | #include < | ||
| + | #include " | ||
| + | using namespace std; | ||
| + | |||
| + | template < | ||
| + | T& maximum(T& | ||
| + | |||
| + | int main() { | ||
| + | | ||
| + | |||
| + | cout << " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Templates συναρτήσεων με αριθμητικές παραμέτρους ===== | ||
| + | |||
| + | Ας υποθέσουμε τώρα ότι θέλουμε να βρούμε το μέγιστο μεταξύ περισσότερων των δύο αριθμητικών τιμών οι οποίες έχουν αποθηκευτεί σε ένα πίνακα. Σε αυτή την περίπτωση η συνάρτηση **maximum** θα μπορούσε να γραφεί ως εξής: | ||
| + | |||
| + | <code cpp> | ||
| + | template < | ||
| + | T& maximum(T a[]) { | ||
| + | T& max = a[0]; | ||
| + | for(int i=1; i<size; i++) | ||
| + | if(a[i]> | ||
| + | max = a[i]; | ||
| + | return max; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Παρατηρήστε ότι η συνάρτηση λαμβάνει μία επιπλέον ακέραια τιμή ως παράμετρο που αντιπροσωπεύει το μέγεθος του πίνακα. | ||
| + | |||
| + | Ο κώδικας χρήσης της παραπάνω συνάρτησης θα μπορούσε να είναι ο εξής: | ||
| + | <code cpp find_max3.cpp> | ||
| + | #include < | ||
| + | using namespace std; | ||
| + | |||
| + | #include " | ||
| + | |||
| + | template < | ||
| + | T& maximum(T a[]) { | ||
| + | T& max = a[0]; | ||
| + | for(int i=1; i<size; i++) | ||
| + | if(a[i]> | ||
| + | max = a[i]; | ||
| + | return max; | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | Student george(" | ||
| + | Student students[] = { george, kate, mary }; | ||
| + | cout << " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||