Σε γλώσσες υψηλού επιπέδου, χρησιμοποιούμε υπερφόρτωση για συναρτήσεις, η οποία χρησιμοποιείται σε συναρτήσεις με διαφορετικές συναρτήσεις αλλά με τον ίδιο αριθμό παραμέτρων, και απαιτούνται πρότυπα για διαφορετικούς τύπους και τον ίδιο αριθμό παραμέτρων
Μικροεφαρμογή C++
- #include<iostream>
- using namespace std;
- template <class T>
- T max(T a,T b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a,b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
Αντιγραφή κώδικα Αυτό είναι ένα απλό παράδειγμα: η λέξη-κλειδί template<class T> είναι η αρχή μιας δομής προτύπου, έτσι ώστε να μην χρειάζεται να γράφουμε πολλούς κώδικες C++ με την ίδια συνάρτηση επανειλημμένα όταν αναζητούμε τη μέγιστη τιμή Σημειώστε ότι όταν καλείτε μια συνάρτηση, ο τύπος της ταιριάζει αυτόματα. Δεν χρειάζεται να εμφανιστεί. Η παραπάνω είναι η πιο βασική χρήση, αλλά θα συναντήσουμε τις εξής καταστάσεις
- #include<iostream>
- using namespace std;
- template <class T,class E>
- E max(T a,E b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a;float b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
Αντιγραφή κώδικα Τι να κάνουμε όταν η συνάρτησή μας χρειάζεται δύο διαφορετικούς τύπους, νομίζω ότι μπορείτε να το καταλάβετε αφού διαβάσετε τον παραπάνω κώδικα. Αλλά ούτως ή άλλως, αυτό που έχουν κοινό είναι ότι οι τύποι ταιριάζουν αυτόματα. Μάλιστα, έχουμε και λάθη, αν δεν μπορούμε να ταιριάξουμε καλά τον τύπο, δηλαδή «το κεφάλι του ταύρου δεν είναι σωστό», τότε η αυτόματη αντιστοίχιση του μεταγλωττιστή θα αλλάξει τον τύπο παραμέτρου σύμφωνα με τους κανόνες της σιωπηρής μετατροπής τύπου, κάτι που τελικά θα οδηγήσει σε απώλεια ακρίβειας του αποτελέσματος. Κοιτάξτε τον κώδικα, μπορείτε να δοκιμάσετε.
- #include<iostream>
- using namespace std;
- template <class T,class E>
- E max(T a,E b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a;float b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
Αντιγραφή κώδικα Το παραπάνω περιεχόμενο δεν είναι πολύ δύσκολο, αλλά υπάρχουν και πολλά μέρη που μπορούν να εξερευνηθούν, δεν ξέρω ποιες είναι οι απόψεις σας |
|