This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
cpp:function_templates [2019/05/02 14:16] gthanos [Templates συναρτήσεων με αριθμητικές παραμέτρους] |
cpp:function_templates [2020/05/18 15:22] gthanos |
||
|---|---|---|---|
| Line 26: | Line 26: | ||
| Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | ||
| - | <code cpp maximum1.cpp> | + | <code cpp find_max1.cpp> |
| template < | template < | ||
| T& maximum(T& | T& maximum(T& | ||
| Line 47: | Line 47: | ||
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| Μπορείτε να παραλείψετε τον τύπο των παραμέτρων κατά την κλήση της συνάρτησης **maximum** ως εξής: | Μπορείτε να παραλείψετε τον τύπο των παραμέτρων κατά την κλήση της συνάρτησης **maximum** ως εξής: | ||
| - | <code cpp maximum1.cpp> | + | <code cpp find_max1.cpp> |
| template < | template < | ||
| T& maximum(T& | T& maximum(T& | ||
| Line 64: | Line 64: | ||
| </ | </ | ||
| - | ===== Templates | + | ===== Templates |
| - | Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση του φοιτητή δίνεται παρακάτω: | + | Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση |
| - | <code cpp Student.hpp> | + | Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή %%<%% το πρόγραμμα εκτυπώνει τα εξής: |
| + | <code cpp find_max2.cpp> | ||
| + | #include < | ||
| + | #include "Student.hpp" | ||
| + | using namespace std; | ||
| - | # | ||
| - | |||
| - | class Student { | ||
| - | char *name; | ||
| - | int aem; | ||
| - | | ||
| - | public: | ||
| - | Student(const char *name, int aem); | ||
| - | Student(); | ||
| - | ~Student(); | ||
| - | char *getName() const; | ||
| - | int getAEM() const; | ||
| - | friend std:: | ||
| - | }; | ||
| - | |||
| - | Student:: | ||
| - | this-> | ||
| - | strcpy(this-> | ||
| - | this-> | ||
| - | } | ||
| - | |||
| - | Student:: | ||
| - | this-> | ||
| - | this-> | ||
| - | } | ||
| - | |||
| - | Student:: | ||
| - | if(name != nullptr) | ||
| - | delete []name; | ||
| - | } | ||
| - | |||
| - | char* Student:: | ||
| - | return name; | ||
| - | } | ||
| - | |||
| - | int Student:: | ||
| - | return aem; | ||
| - | } | ||
| - | |||
| - | std:: | ||
| - | out << st.name << " " << st.aem; | ||
| - | return out; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | O κώδικας που κάνει χρήση της παραπάνω κλάσης είναι ο εξής: | ||
| - | |||
| - | <code cpp maximum2.cpp> | ||
| template < | template < | ||
| T& maximum(T& | T& maximum(T& | ||
| - | |||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | #include " | ||
| int main() { | int main() { | ||
| - | | + | Student george(" |
| - | cout << " | + | |
| - | } | + | |
| - | </ | + | |
| - | Εάν προσπαθήσουμε να μεταγλωττίσουμε, το πρόγραμμα βγάζει αρκετά μηνύματα λάθους τα οποία συμπυκνώνονται στο ότι ο μεταγλωττιστής δεν ξέρει πως να διαχειριστή την ανισότητα μεταξύ δύο αντικειμένων τύπου // | + | cout << " |
| - | + | ||
| - | <code cpp> | + | |
| - | // σύγκριση δύο μαθητών με βάση το ΑΕΜ τους | + | |
| - | bool Student:: | + | |
| - | if(aem | + | |
| - | return true; | + | |
| - | return false; | + | |
| } | } | ||
| - | </ | ||
| - | |||
| - | Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή **> | ||
| - | < | ||
| - | max(' | ||
| </ | </ | ||