Συναρτήσεις#
Εισαγωγή#
Οι συναρτήσεις αποτελούν θεμελιώδες στοιχείο του προγραμματισμού C++, καθώς συσκευάζουν τμήματα κώδικα σε επαναχρησιμοποιήσιμα, αποτελεσματικά τμήματα κώδικα, σχεδιασμένα να εκτελούν μια συγκεκριμένη εργασία. Οι συναρτήσεις μπορούν να κληθούν πολλές φορές μέσα σε ένα πρόγραμμα, διευκολύνοντας την οργάνωση του κώδικα και συμβάλλοντας στην αποφυγή επαναλαμβανόμενου κώδικα. Οι συναρτήσεις διευκολύνουν επίσης την αποσφαλμάτωση του κώδικα.
Αυτή η σελίδα καλύπτει τα βασικά στοιχεία χρήσης συναρτήσεων σε C++, όπως:
Δομή και Σύνταξη Συναρτήσεων — Πώς γράφονται οι συναρτήσεις σε C++, συμπεριλαμβανομένων των τύπων επιστροφής, των ονομάτων και των παραμέτρων.
Πρωτότυπα Συναρτήσεων — Τι είναι οι πρωτότυπες συναρτήσεις και γιατί χρησιμοποιούνται.
Ορισμός και Κλήση Συναρτήσεων — Πώς να δημιουργήσετε συναρτήσεις και να τις καλέσετε από το πρόγραμμά σας.
Επιστρέφονται τιμές — Πώς οι συναρτήσεις μπορούν να στείλουν δεδομένα πίσω στον καλούντα.
Παράβαση με αναφορά — Πώς οι συναρτήσεις μπορούν να τροποποιήσουν μεταβλητές εκτός του δικού τους πεδίου εφαρμογής.
Συναρτήσεις Επανάκλησης — Πώς μπορούν οι συναρτήσεις να μεταβιβαστούν σε άλλες συναρτήσεις και να κληθούν αυτόματα σε απόκριση σε συμβάντα.
Συναρτήσεις με προεπιλεγμένα ορίσματα — Πώς μπορούν να δοθούν προεπιλεγμένες τιμές σε παραμέτρους όταν δεν παρέχεται όρισμα.
Δομή και Σύνταξη Συνάρτησης#
Στην C++, οι συναρτήσεις πρέπει να δηλώνονται με τον τύπο επιστροφής, το όνομα και τις παραμέτρους τους. Η βασική σύνταξη είναι:
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
Λειτουργικά Μέρη |
Περιγραφή |
|---|---|
|
Ο τύπος δεδομένων που επιστρέφει η συνάρτηση, μερικές συνηθισμένες επιλογές είναι:
|
|
Το όνομα της συνάρτησης. |
|
Προαιρετικό. Μια λίστα πληκτρολογημένων παραμέτρων, διαχωρισμένη με κόμμα, γραμμένη ως |
|
Προαιρετικό. Η τιμή που επιστρέφεται από τη συνάρτηση. Εάν το |
Σημείωση: Μια συνάρτηση πρέπει πάντα να δηλώνεται πριν την κλήση της, διαφορετικά πρέπει να παρέχετε ένα πρωτότυπο συνάρτησης.
Πρωτότυπα Λειτουργίας#
Στην C++, ο κώδικας διαβάζεται από πάνω προς τα κάτω. Αυτό σημαίνει ότι μια συνάρτηση πρέπει να είναι γνωστή στον μεταγλωττιστή πριν να μπορεί να κληθεί.
Ένα πρωτότυπο συνάρτησης σάς επιτρέπει να χρησιμοποιήσετε μια συνάρτηση πριν γράψετε τον πλήρη κώδικά της. Αυτό σας επιτρέπει να διατηρήσετε την τιμή main() κοντά στην αρχή του προγράμματός σας, ενώ τοποθετείτε τους ορισμούς συνάρτησης αργότερα, όπου είναι πιο εύκολο να οργανωθούν και να διαβαστούν.
Χωρίς πρωτότυπο, θα έπρεπε να ορίσετε κάθε συνάρτηση πάνω από main(), κάτι που μπορεί να κάνει τα έργα πιο δύσκολα στην παρακολούθηση καθώς αναπτύσσονται.
Ορίστε το πρωτότυπο της συνάρτησης (εκτός του
int main())// The function's prototype void greeting();Καλέστε τη συνάρτηση εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); greeting(); }Γράψτε το σώμα της συνάρτησης μετά
void greeting() { Brain.Screen.print("Hello!"); }
Ορισμός και κλήση συναρτήσεων#
Functions with No Parameters#
Εάν μια συνάρτηση δεν απαιτεί εισαγωγή, μπορείτε να την ορίσετε χωρίς παραμέτρους. Χρησιμοποιήστε void ως τύπο επιστροφής εάν η συνάρτηση δεν επιστρέφει τιμή.
Ορίστε τη συνάρτηση (εκτός του
int main())// Define a function to display a message void greeting() { Brain.Screen.print("Hello!"); }Καλέστε τη συνάρτηση εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message greeting(); }
Functions with Parameters#
Μπορείτε επίσης να προσθέσετε παραμέτρους σε συναρτήσεις, οι οποίες σας επιτρέπουν να μεταβιβάσετε πληροφορίες για τη χρήση της συνάρτησης.
Σημείωση: Το κείμενο μπορεί να μεταβιβαστεί χρησιμοποιώντας συμβολοσειρές τύπου C (const char*) ή συμβολοσειρές C++ (std::string).
Ορίστε τη συνάρτηση (εκτός του
int main())// Define a function with a parameter void namedGreeting(const char* name) { Brain.Screen.print("Hello, %s!", name); }Καλέστε τη συνάρτηση με μια παράμετρο εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call the function to display the message namedGreeting("Stranger"); }
Επιστρεφόμενες τιμές#
Οι συναρτήσεις μπορούν να στείλουν δεδομένα πίσω στον καλούντα χρησιμοποιώντας τη λέξη-κλειδί return Αυτό σας επιτρέπει να καταγράψετε και να χρησιμοποιήσετε την έξοδο στο έργο σας.
Ορίστε τη συνάρτηση (εκτός του
int main())// Define a function that multiplies numbers by 2 int timesTwo(int number) { return number * 2; }Καλέστε τη συνάρτηση με μια παράμετρο εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Display the return value Brain.Screen.print("%d", timesTwo(2)); }
Αναφορά διέλευσης#
Από προεπιλογή, η C++ μεταβιβάζει παραμέτρους συνάρτησης κατά τιμή, που σημαίνει ότι η συνάρτηση λαμβάνει ένα αντίγραφο της αρχικής μεταβλητής. Οι αλλαγές που γίνονται μέσα στη συνάρτηση δεν επηρεάζουν την αρχική τιμή.
Ορίστε τη συνάρτηση (εκτός του
int main())// Add 1 to the number void addOne(int number) { number++; }Καλέστε τη συνάρτηση με μια παράμετρο εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will still be 5 }
Για να επιτραπεί σε μια συνάρτηση να τροποποιήσει την αρχική μεταβλητή, οι παράμετροι μπορούν να περαστούν με αναφορά χρησιμοποιώντας τα σύμβολα &.
Ορίστε τη συνάρτηση (εκτός του
int main())// Add 1 to the number void addOne(int& number) { number++; }Καλέστε τη συνάρτηση με μια παράμετρο εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); int value = 5; addOne(value); // "value" will now be 6 }
Η μεταβίβαση μέσω αναφοράς επιτρέπει στις συναρτήσεις να ενημερώνουν μεταβλητές που ορίζονται εκτός της συνάρτησης χωρίς να επιστρέφουν τιμή.
Συναρτήσεις επανάκλησης#
Μια συνάρτηση επανάκλησης είναι μια συνάρτηση που μεταβιβάζεται σε μια άλλη συνάρτηση και καλείται αυτόματα όταν συμβεί ένα συγκεκριμένο συμβάν.
Οι επανακλήσεις χρησιμοποιούνται συνήθως για συμβάντα όπως το πάτημα κουμπιών ή οι ενημερώσεις αισθητήρων.
Αντί να καλέσετε τη συνάρτηση εσείς οι ίδιοι, το έργο την καλεί για εσάς όταν συμβεί το συμβάν.
Ορίστε τη συνάρτηση επανάκλησης (εκτός από
int main())// Create a callback function void onPressed() { Brain.Screen.print("Screen pressed!"); }Καταχωρίστε την επανάκληση μέσα στο
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Call onPressed whenever the screen is pressed Brain.Screen.pressed(onPressed); }
Callback Signatures#
Κάθε συνάρτηση επανάκλησης πρέπει να ακολουθεί μια συγκεκριμένη υπογραφή, η οποία ορίζει:
Ο τύπος επιστροφής
Ο αριθμός των παραμέτρων
Οι τύποι παραμέτρων
Η απαιτούμενη υπογραφή καθορίζεται από το API. Η συνάρτηση επανάκλησης πρέπει να ταιριάζει ακριβώς με αυτήν την υπογραφή.
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
Τα ονόματα των παραμέτρων είναι περιγραφικά και ενδέχεται να διαφέρουν, αλλά ο τύπος επιστροφής, η σειρά των παραμέτρων και οι τύποι παραμέτρων πρέπει να ταιριάζουν ακριβώς.
Συναρτήσεις με προεπιλεγμένα ορίσματα#
Οι συναρτήσεις μπορούν να ορίσουν προεπιλεγμένες τιμές για μία ή περισσότερες παραμέτρους. Ένα προεπιλεγμένο όρισμα χρησιμοποιείται όταν δεν παρέχεται τιμή για αυτήν την παράμετρο κατά την κλήση της συνάρτησης.
Κανόνες για τα προεπιλεγμένα ορίσματα:
Τα προεπιλεγμένα ορίσματα πρέπει να είναι οι τελευταίες παράμετροι στον ορισμό της συνάρτησης.
Μόλις μια παράμετρος αποκτήσει μια προεπιλεγμένη τιμή, όλες οι παράμετροι μετά από αυτήν πρέπει επίσης να έχουν προεπιλεγμένες τιμές.
Εάν μια συνάρτηση καθορίζει προεπιλεγμένα ορίσματα στο πρωτότυπο, αυτές οι προεπιλεγμένες τιμές δεν πρέπει να καθοριστούν ξανά στον ορισμό της συνάρτησης.
Ορίστε τη συνάρτηση (εκτός του
int main())// Required parameter first, default parameter last void greeting(const char* name, int repeatCount = 1) { for (int i = 0; i < repeatCount; i++) { Brain.Screen.print("Hello, %s!", name); Brain.Screen.newLine(); } }Καλέστε τη συνάρτηση εντός
int main()int main() { /* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ vexcodeInit(); // Say what name to greet (EXP) and // use default value for repeatCount (1) greeting("EXP"); Brain.Screen.newLine(); // Overrides the default value to 3 greeting("EXP", 3); }
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (EXP) and
// use default value for repeatCount (1)
greeting("EXP");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("EXP", 3);
}