cpp:function_templates
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:function_templates [2019/05/02 14:05] – [Templates Συναρτήσεων με παραμέτρους κλάσεις] gthanos | cpp:function_templates [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 26: | Line 26: | ||
Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | Ας προσπαθήσουμε να χρησιμοποιήσουμε την παραπάνω συνάρτηση. | ||
- | <code cpp maximum1.cpp> | + | <code cpp find_max1.cpp> |
template < | template < | ||
T& maximum(T& | T& maximum(T& | ||
Line 42: | Line 42: | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | Μία // | + | Μία // |
</ | </ | ||
- | ===== Templates Συναρτήσεων | + | <WRAP tip 80% center round> |
+ | Μπορείτε | ||
+ | <code cpp find_max1.cpp> | ||
+ | template < | ||
+ | T& maximum(T& | ||
- | Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση του φοιτητή δίνεται παρακάτω: | + | #include < |
+ | using namespace std; | ||
- | <code cpp Student.hpp> | + | int main() |
- | + | int a = 5, b = 10; | |
- | # | + | |
- | + | | |
- | class Student | + | |
- | char *name; | + | |
- | int aem; | + | |
- | | + | |
- | public: | + | |
- | Student(const char *name, int aem); | + | |
- | | + | |
- | ~Student(); | + | |
- | char *getName() const; | + | |
- | int getAEM() const; | + | |
- | friend std:: | + | |
- | }; | + | |
- | + | ||
- | Student::Student(const char *name, int aem) { | + | |
- | this-> | + | |
- | | + | |
- | this-> | + | |
- | } | + | |
- | + | ||
- | Student::Student() { | + | |
- | this-> | + | |
- | this-> | + | |
- | } | + | |
- | + | ||
- | Student:: | + | |
- | if(name != nullptr) | + | |
- | delete []name; | + | |
- | } | + | |
- | + | ||
- | char* Student:: | + | |
- | return name; | + | |
- | } | + | |
- | + | ||
- | int Student:: | + | |
- | return aem; | + | |
- | } | + | |
- | + | ||
- | std:: | + | |
- | out << | + | |
- | return out; | + | |
} | } | ||
</ | </ | ||
+ | Ο λόγος είναι ότι ο // | ||
+ | </ | ||
- | O κώδικας που κάνει χρήση της | + | ===== Templates συναρτήσεων με παραμέτρους σύνθετους τύπους (κλάσεις) ===== |
- | <code cpp maximum2.cpp> | + | Ας υποθέσουμε ότι θέλουμε να κάνουμε χρήση της παραπάνω συνάρτηση **maximum** προκειμένου να βρούμε το μέγιστο μεταξύ δύο φοιτητών. Η κλάση //Student// του φοιτητή δίνεται στην προηγούμενη ενότητα: |
- | template < | + | |
- | T& | + | |
+ | Εφόσον προσθέσουμε την παραπάνω συνάρτηση υπεφόρτωσης του τελεστή %%>%% το πρόγραμμα εκτυπώνει τα εξής: | ||
+ | <code cpp find_max2.cpp> | ||
#include < | #include < | ||
+ | #include " | ||
using namespace std; | using namespace std; | ||
- | #include " | + | template < |
+ | T& maximum(T& | ||
int main() { | int main() { | ||
- | | + | Student george(" |
- | cout << " | + | |
+ | cout << " | ||
} | } | ||
</ | </ | ||
- | Εάν προσπαθήσουμε να μεταγλωττίσουμε, το πρόγραμμα βγάζει αρκετά μηνύματα λάθους | + | ===== Templates συναρτήσεων με αριθμητικές |
+ | |||
+ | Ας υποθέσουμε τώρα ότι | ||
<code cpp> | <code cpp> | ||
- | // σύγκριση δύο μαθητών με βάση το ΑΕΜ τους | + | template |
- | bool Student:: | + | T& maximum(T a[]) { |
- | | + | |
- | | + | for(int i=1; i<size; i++) |
- | return | + | |
+ | max = a[i]; | ||
+ | return | ||
} | } | ||
</ | </ | ||
- | Εφόσον προσθέσουμε την παραπάνω | + | Παρατηρήστε ότι η συνάρτηση |
- | < | + | |
- | max(' | + | |
- | </ | + | |
- | ===== Templates συναρτήσεων με αριθμητικές παραμέτρους ===== | + | Ο κώδικας χρήσης της παραπάνω συνάρτησης θα μπορούσε να είναι ο εξής: |
+ | <code cpp find_max3.cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
- | Ας υποθέσουμε τώρα ότι θέλουμε να βρούμε το μέγιστο μεταξύ περισσότερων των δύο αριθμητικών τιμών οι οποίες έχουν αποθηκευτεί σε ένα πίνακα. Σε αυτή την περίπτωση η συνάρτηση **maximum** θα μπορούσε να γραφεί ως εξής: | + | #include " |
- | template < | + | template < |
T& maximum(T a[]) { | T& maximum(T a[]) { | ||
T& max = a[0]; | T& max = a[0]; | ||
Line 141: | Line 116: | ||
return max; | return max; | ||
} | } | ||
+ | |||
+ | int main() { | ||
+ | Student george(" | ||
+ | Student students[] = { george, kate, mary }; | ||
+ | cout << " | ||
+ | } | ||
+ | </ | ||
cpp/function_templates.1556805933.txt.gz · Last modified: 2019/05/02 13:05 (external edit)