references c
Γνωρίστε τους τρόπους δήλωσης και χρήσης αναφορών στο C ++.
Η αναφορά είναι μια σημαντική ιδέα στη γλώσσα προγραμματισμού C ++. Αν και δεν είναι τόσο ισχυρό όσο οι δείκτες, ωστόσο μας επιτρέπει να το χρησιμοποιούμε για να γράφουμε αποτελεσματικά προγράμματα. Η κύρια χρήση της μεταβλητής αναφοράς είναι η μετάδοση παραμέτρων σε συναρτήσεις.
Η δημοφιλής τεχνική διαβίβασης παραμέτρων «pass by referensi» χρησιμοποιεί αναφορές. Σε αυτό το σεμινάριο, θα δούμε τι είναι μια αναφορά και πώς να την δηλώσουμε και να τη χρησιμοποιήσουμε. Θα συζητήσουμε επίσης τις διαφορές μεταξύ των δεικτών και των αναφορών, καθώς και τη μετάδοση και επιστροφή μιας αναφοράς σε / από συναρτήσεις.
=> Δείτε εδώ για να εξερευνήσετε τη λίστα με τα πλήρη σεμινάρια C ++.
Τι θα μάθετε:
- Τι είναι μια αναφορά;
- Δήλωση μεταβλητών αναφοράς
- Αναφορά Vs Pointers
- Διαβίβαση αναφορών σε συναρτήσεις
- Επιστροφές αναφοράς
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι μια αναφορά;
Η αναφορά είναι ένα ψευδώνυμο ή άλλο όνομα για μια μεταβλητή. Λαμβάνοντας υπόψη μια μεταβλητή με ένα αναγνωριστικό, μπορούμε να παρέχουμε ένα άλλο αναγνωριστικό σε αυτήν τη μεταβλητή, ώστε να μπορούμε να αναφερθούμε σε αυτήν τη μεταβλητή είτε με το αρχικό της όνομα είτε με άλλο όνομα. Αυτό το «άλλο όνομα» είναι αυτό που ονομάζεται Αναφορά.
Ας υποθέσουμε ότι έχουμε μια μεταβλητή «i» με τιμή 17. Εάν το j είναι μια αναφορά, τότε η αναπαράσταση μνήμης της μεταβλητής i και της αναφοράς j εμφανίζεται παρακάτω.
Όπως φαίνεται στο παραπάνω σχήμα, μια μεταβλητή και είναι ψευδώνυμο, δηλαδή σημείο αναφοράς στην ίδια τιμή.
Δήλωση μεταβλητών αναφοράς
Μια αναφορά μπορεί να δηλωθεί χρησιμοποιώντας τον τελεστή «&».
Η δήλωση αναφοράς φαίνεται παρακάτω.
int a = 10; int& refvar = a;
Έτσι, στον παραπάνω κώδικα, έχουμε δηλώσει μια ακέραια μεταβλητή με την τιμή 10. Στη συνέχεια, δηλώνουμε μια άλλη μεταβλητή refvar και αντιστοιχίζουμε μια μεταβλητή σε αυτήν. Λάβετε υπόψη ότι κατά τη δήλωση refvar, χρησιμοποιήσαμε το & operator πριν από το όνομα της μεταβλητής. Αυτό δείχνει ότι το refvar είναι μια αναφορά σε μια ήδη υπάρχουσα μεταβλητή.
Μπορούμε να αναφερθούμε στη μεταβλητή «a» είτε χρησιμοποιώντας το όνομα μεταβλητής a είτε χρησιμοποιώντας το όνομα αναφοράς «refvar».
ποιο είναι το καλύτερο εργαλείο κατάργησης κακόβουλου λογισμικού
Δίνεται παρακάτω ένα απλό παράδειγμα παραπομπών:
#include #include using namespace std; int main() { int age = 22; int& numYears = age; double salary = 10000.00; double& wages = salary; cout<<'Age: '< Παραγωγή:
Ηλικία: 22
Αριθμός ετών: 22
Μισθός: 10000
Μισθοί: 10000
Στον παραπάνω κώδικα, έχουμε μια ακέραια μεταβλητή ηλικία. Στη συνέχεια, δηλώνουμε μια ακέραια μεταβλητή αναφοράς numYears στη μεταβλητή ηλικίας. Έχουμε έναν άλλο μεταβλητό μισθό τύπου διπλού. Στη συνέχεια, δηλώνουμε μια διπλή μεταβλητή αναφορά μισθών στον μεταβλητό μισθό.
Στη συνέχεια, εκτυπώνουμε τις μεταβλητές, την πρώτη ηλικία και μετά την αναφορά της ακολουθείται από το μισθό και την αναφορά της. Εάν ελέγξουμε την έξοδο του προγράμματος, καταλαβαίνουμε ότι η μεταβλητή και η αναφορά σε αυτό δείχνει την ίδια τιμή και επομένως η ηλικία και ο αριθμός ετών, καθώς και οι μισθοί και οι μισθοί, έχουν τις ίδιες τιμές.
Αναφορά Vs Pointers
Σε σύγκριση με δείκτες, οι αναφορές είναι ασφαλέστερες και πιο εύχρηστες.
Θα συζητήσουμε μερικές διαφορές μεταξύ δεικτών και αναφορών:
- Σε αντίθεση με τους δείκτες, οι αναφορές δεν μπορούν να έχουν μηδενική τιμή. Είναι υποχρεωτικό για τις αναφορές να έχουν εκχωρηθεί μια τιμή.
- Οι αναφορές αρχικοποιούνται τη στιγμή που δημιουργούνται. Σε αντίθεση με αυτό, οι δείκτες μπορούν να αρχικοποιηθούν οποιαδήποτε στιγμή και όχι απαραίτητα κατά τη δήλωση.
- Οι δείκτες μπορούν να ανατεθούν στις τιμές με ευκολία. Αλλά με αναφορές, δεν μπορούμε να το κάνουμε αυτό. Μόλις εκχωρηθεί μια τιμή της μεταβλητής, δηλαδή όταν δημιουργηθεί ένα ψευδώνυμο μιας μεταβλητής, δεν μπορούμε να αντιστοιχίσουμε άλλη μεταβλητή σε αυτήν την αναφορά.
- Δεν έχουμε άκυρες αναφορές. Εξ ορισμού, μια αναφορά είναι ένα ψευδώνυμο για τη μεταβλητή και αρχικοποιείται κατά τη διάρκεια της ίδιας της δημιουργίας. Έτσι, δεν υπάρχει πιθανότητα να έχουμε άκυρη αναφορά και αργότερα να εκχωρήσουμε μια μεταβλητή με συγκεκριμένο τύπο δεδομένων σε αυτήν. Αντίθετα, μπορούμε να έχουμε άδειους δείκτες.
Λόγω αυτών των περιορισμών που συζητήθηκαν παραπάνω, οι αναφορές στο C ++ δεν μπορούν να χρησιμοποιηθούν με δομές δεδομένων όπως μια συνδεδεμένη λίστα. Λάβετε υπόψη ότι στην Java, δεν έχουμε όλους αυτούς τους περιορισμούς ή περιορισμούς στις αναφορές.
Διαβίβαση αναφορών σε συναρτήσεις
Στα προηγούμενα σεμινάριά μας σχετικά με τις συναρτήσεις, έχουμε ήδη συζητήσει την τεχνική παραμέτρων «pass by reference» και έχουμε δει την εναλλαγή δύο αριθμών παράδειγμα χρησιμοποιώντας αυτήν την τεχνική. Παραλείπουμε την εξήγηση αυτής της τεχνικής σε αυτήν την ενότητα και παρουσιάζουμε τη λειτουργία ανταλλαγής μόνο για άλλη μια φορά ως παράδειγμα.
Αλλά αυτή τη φορά, αντί να ανταλλάσσουμε αριθμούς, θα ανταλλάξουμε δύο χορδές.
#include #include using namespace std; void swap(char * &str1, char * &str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = 'references'; char *str2 = 'pointers'; cout<<'str1 = '< Παραγωγή:
str1 = αναφορές str2 = δείκτες
Μετά την ανταλλαγή….
str1 = δείκτες str2 = αναφορές
Έτσι, σε αυτό το πρόγραμμα, περνάμε συμβολοσειρές (char *) στη λειτουργία ανταλλαγής. Οι τυπικές παράμετροι είναι δύο αναφορές σε μια μεταβλητή του τύπου char *. Σημειώνουμε ότι όταν ανταλλάσσονται δύο τιμές, η τροποποίησή τους αντικατοπτρίζεται στη λειτουργία κλήσης καθώς χρησιμοποιούμε αναφορές / ψευδώνυμα για παραμέτρους.
Επιστροφές αναφοράς
Όπως ακριβώς επιστρέφοντας δείκτες από συναρτήσεις, μπορούμε επίσης να επιστρέψουμε αναφορές από συναρτήσεις. Επιστρέφοντας αναφορές από μια συνάρτηση επιστρέφουν επίσης έναν έμμεσο δείκτη στην τιμή επιστροφής. Εξαιτίας αυτού του λόγου, μια συνάρτηση που επιστρέφει μια αναφορά μπορεί να χρησιμοποιηθεί στην αριστερή πλευρά της εργασίας.
Ας δώσουμε ένα παράδειγμα επιστροφής μιας αναφοράς από μια συνάρτηση.
#include using namespace std; int myarray() = {1, 0, 2, 3, 5}; int& setValues( int i ) //returns reference to the array { return myarray(i); } int main () { cout << 'myarray before change' << endl; for ( int i = 0; i < 5; i++ ) { cout << 'myarray(' << i << ') = '; cout << myarray(i) << endl; } setValues(1) = 1; setValues(3) = 8; cout << 'Value after change' << endl; for (int i = 0; i < 5; i++ ) { cout<< 'myarray(' << i << ') = '; cout << myarray(i) << endl; } return 0; }
Παραγωγή:
myarray πριν από την αλλαγή
myarray (0) = 1
myarray (1) = 0
myarray (2) = 2
myarray (3) = 3
myarray (4) = 5
Τιμή μετά την αλλαγή
myarray (0) = 1
myarray (1) = 1
myarray (2) = 2
myarray (3) = 8
myarray (4) = 5
Το στιγμιότυπο οθόνης για το ίδιο φαίνεται παρακάτω:
Όπως φαίνεται στον παραπάνω κώδικα, ορίζουμε μια συνάρτηση setValues που επιστρέφει μια αναφορά και μια παράμετρο που είναι ακέραιος. Μέσα στη συνάρτηση, επιστρέφουμε απλώς την αναφορά του πίνακα στη θέση I στο C ++.
Στην κύρια συνάρτηση, εκτυπώνουμε τις τιμές του πίνακα. Στη συνέχεια, χρησιμοποιώντας τη συνάρτηση setValues, αλλάζουμε τις τιμές δύο στοιχείων στον πίνακα. Και πάλι εκτυπώνουμε την τιμή του πίνακα.
Ένα πράγμα που πρέπει να σημειώσουμε με αναφορές είναι ότι μπορούμε να έχουμε μια συνάρτηση να επιστρέφει μια αναφορά μόνο όταν τα δεδομένα είναι είτε στατικά είτε παγκόσμια. Είναι παράνομο να επιστρέψετε μια αναφορά σε μια τοπική μεταβλητή στο C ++.
συμπέρασμα
Οι αναγνώστες θα πρέπει να σημειώσουν ότι η κύρια χρήση των αναφορών είναι η μετάδοση παραμέτρων σε συναρτήσεις.
Στα επερχόμενα σεμινάρια, θα καλύψουμε τις συναρτήσεις / εκφράσεις lambda σε C ++ προτού προχωρήσουμε σε αντικειμενοστρεφή προγραμματισμό στο C ++.
=> Δείτε τα καλύτερα εκπαιδευτικά σεμινάρια C ++ εδώ.
πώς να υποβάλετε μια αναφορά σφάλματος
Συνιστώμενη ανάγνωση
- Καλύτερη δωρεάν σειρά C # Tutorial: Ο απόλυτος οδηγός C # για αρχάριους
- Δείκτες και λειτουργίες δείκτη στο C ++
- Φόρτωση δοκιμής με HP LoadRunner Tutorials
- Μεταβλητές σε C ++
- Αντικειμενοστρεφής προγραμματισμός στο C ++
- Tutorial Unix Pipes: Pipes in Unix Programming
- Λειτουργίες βιβλιοθήκης στο C ++
- 70+ ΚΑΛΥΤΕΡΑ C ++ Tutorials για να μάθετε C ++ Προγραμματισμό ΔΩΡΕΑΝ