User Tools

Site Tools


cpp:functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:functions [2021/04/27 07:29] – [Κλήση με τιμή και κλήση με αναφορά] gthanoscpp:functions [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 128: Line 128:
 Παρατηρήστε ότι μετά την έξοδο από τις μεθόδους //powerOf2Ref// και //powerOf2Ptr// η μεταβλητή ''a'' έχει αλλάξει τιμή κάτι που δεν ισχύει μετά την έξοδο από την //powerOf2//. Παρατηρήστε ότι μετά την έξοδο από τις μεθόδους //powerOf2Ref// και //powerOf2Ptr// η μεταβλητή ''a'' έχει αλλάξει τιμή κάτι που δεν ισχύει μετά την έξοδο από την //powerOf2//.
  
-<WRAP center round info 80%>+<WRAP center round tip 80%>
 Κατά την κλήση μίας συνάρτησης, όταν θέλουμε να περάσουμε αντικείμενα που περιέχουν μεγάλο όγκο πληροφορίας είναι προτιμότερο να τα περάσουμε με αναφορά ακόμη και εάν δεν επιθυμούμε οι πιθανές αλλαγές στις τυπικές παραμέτρους να είναι ορατές μετά την κλήση της συνάρτησης. Ο λόγος είναι ότι η κλήση με αναφορά έχει σταθερό κόστος αντιγραφής ισοδύναμο με το μήκος μίας διεύθυνσης μνήμης, ενώ η αντιγραφή ενός μεγάλου αντικειμένου έχει κόστος όσο το μέγεθος του αντικειμένου.  Κατά την κλήση μίας συνάρτησης, όταν θέλουμε να περάσουμε αντικείμενα που περιέχουν μεγάλο όγκο πληροφορίας είναι προτιμότερο να τα περάσουμε με αναφορά ακόμη και εάν δεν επιθυμούμε οι πιθανές αλλαγές στις τυπικές παραμέτρους να είναι ορατές μετά την κλήση της συνάρτησης. Ο λόγος είναι ότι η κλήση με αναφορά έχει σταθερό κόστος αντιγραφής ισοδύναμο με το μήκος μίας διεύθυνσης μνήμης, ενώ η αντιγραφή ενός μεγάλου αντικειμένου έχει κόστος όσο το μέγεθος του αντικειμένου. 
  
 Για τους βασικούς τύπους δεδομένων η κλήση με αναφορά σε σχέση με την κλήση με τιμή δεν βελτιώνει την ταχύτητα εκτέλεσης του προγράμματος. Για τους βασικούς τύπους δεδομένων η κλήση με αναφορά σε σχέση με την κλήση με τιμή δεν βελτιώνει την ταχύτητα εκτέλεσης του προγράμματος.
 </WRAP> </WRAP>
 +
 +===== Αναφορές ως επιστρεφόμενες τιμές συναρτήσεων =====
 +
 +[[cpp:references#αναφορές_ως_παράμετροι_συναρτήσεων| Δείτε τη σχετική ενότητα]].
  
 ===== Υπερφόρτωση συναρτήσεων ===== ===== Υπερφόρτωση συναρτήσεων =====
  
-Η C++ (όπως και η Java) επιτρέπει δύο συναρτήσεις να έχουν το ίδιο όνομα αλλά διαφορετικό αριθμό ή τύπο παραμέτρων. Αυτό συμβαίνει διότι η συνάρτηση δεν ορίζεται μόνο από το όνομα της, αλλά από το όνομα της σε συνδυασμό με τις τυπικές παραμέτρους που λαμβάνει. Δείτε το προηγούμενο παράδειγμα προσαρμοσμένο, ώστε οι συναρτήσεις να λαμβάνουν το ίδιο όνομα.+Η C++ (όπως και η Java) επιτρέπει δύο συναρτήσεις να έχουν το ίδιο όνομα αλλά διαφορετικό αριθμό ή τύπο παραμέτρων. Αυτό συμβαίνει διότι η συνάρτηση δεν ορίζεται μόνο από το όνομα της, αλλά από το όνομα της σε συνδυασμό με τις τυπικές παραμέτρους που λαμβάνει. Δείτε το προηγούμενο παράδειγμα προσαρμοσμένο, ώστε οι συναρτήσεις με το ίδιο όνομα να διαφοροποιούνται με βάση τα ορίσματα τους.
  
 <code c++ powerOf2.cpp> <code c++ powerOf2.cpp>
Line 169: Line 173:
 } }
 </code> </code>
- 
- 
  
 ===== Template συναρτήσεων ===== ===== Template συναρτήσεων =====
Line 180: Line 182:
 </code> </code>
  
-Παρατηρούμε ότι οι παραπάνω συναρτήσεις έχουν το ίδιο διαφορετικούς τύπου παραμέτρωναλλά τον ίδιο αριθμό παραμέτρων και το ίδιο σώμα. Σε αυτές τις περιπτώσεις η C++ δίνει τη δυνατότητα ορισμού template συναρτήσεων ως εξής:+Παρατηρούμε ότι οι παραπάνω συναρτήσεις έχουν τον ίδιο αριθμό παραμέτρων και το ίδιο σώμα, αλλά διαφορετικούς τύπους παραμέτρων. Σε αυτές τις περιπτώσεις η C++ δίνει τη δυνατότητα ορισμού template συναρτήσεων, δηλαδή συναρτήσεων που λαμβάνουν ως επιπλέον χαρακτηριστικό τον τύπο δεδομένων στον οποίο θα εφαρμοστούν. Παράδειγμα τέτοιας //templated// συνάρτησης δίνεται παρακάτω (μην σας μπερδεύει η δεσμευμένη λέξη class):
  
 <code c++> <code c++>
Line 189: Line 191:
 </code> </code>
  
-η δεσμευμένη έκφραση ''template <class T>'') μπορεί να αντικατασταθεί από την επίσης δεσμευμένη έκφραση ''template <typename T>''. Προκειμένου να κάνετε χρήση ενός template συνάρτησης θα πρέπει κατά την κλήση να ορίσετε και τον τύπο των δεδομένων για τον οποίο καλείται τη συγκεκριμένη συνάρτηση ως εξής:+η δεσμευμένη έκφραση ''template <class T>'') μπορεί να αντικατασταθεί από την επίσης δεσμευμένη έκφραση ''template <typename T>''. Προκειμένου να κάνετε χρήση μιας //template// συνάρτησης θα πρέπει κατά την κλήση να ορίσετε και τον τύπο των δεδομένων για τον οποίο καλείται η συγκεκριμένη συνάρτηση ως εξής:
  
 <code c++> <code c++>
cpp/functions.1619508555.txt.gz · Last modified: 2021/04/27 06:29 (external edit)