Ο τύπος reference στη γλώσσα προγραμματισμού Cpp

Ο τύπος reference στη γλώσσα προγραμματισμού Cpp

Ο τύπος reference στη γλώσσα προγραμματισμού Cpp χρησιμοποιείται για οποιοδήποτε αντικείμενο αποτελεί ψευδώνυμο μίας μεταβλητής ή ενός αντικειμένου και η τιμή του ισοδυναμεί με την τιμή του αντικειμένου στο οποίο αναφέρεται. Η δημιουργία του συντάσσεται ταυτόχρονα με τη δήλωσή του, κατά την οποία καθορίζεται και το αντικείμενο αναφοράς. Το reference μπορεί να λειτουργεί πλέον ως εναλλακτικό όνομα για το πρωτότυπό του και οποιαδήποτε πράξη πραγματοποιείται σε αυτό έχει πανομοιότυπο αντίκτυπο στην αρχική μεταβλητή.

Ο τύπος reference στη γλώσσα προγραμματισμού Cpp: σύνταξη δήλωσης και δημιουργίας

Κατά τη δήλωση ενός reference, αρχικά συντάσσεται ο τύπος του, που πρέπει να είναι πανομοιότυπος με τον τύπο του πρωτοτύπου. Επέκταση του τύπου αποτελεί το σύμβολο &, προκειμένου να ενημερωθεί ο compiler για τη δημιουργία του reference. Χωρίς το σύμβολο αυτό, η δήλωση αφορά σε συμβατική δήλωση μεταβλητής. Συντακτικά ακολουθεί το επιθυμητό -και επιτρεπτό- όνομα του reference, ο τελεστής εκχώρησης = και το όνομα της αρχικής μεταβλητής ή του αντικειμένου.

Σχετικά με το όνομα που ορίζεται, επικρατεί η αμοιβαία παραδοχή -μεταξύ των προγραμματιστών- ότι αξιοποιείται το όνομα της πρωτότυπης μεταβλητής με prefix το γράμμα “r” (ως ενδεικτικό της λέξης reference), ακολουθώντας την τεχνική lower Cammel Case. Παραδείγματος χάριν για μία μεταβλητή ακεραίου με όνομα number, το όνομα του reference θα είναι το rNumber, χωρίς βέβαια η πρακτική αυτή να αποτελεί μονόδρομο ή κανόνα. Για τη δήλωση και δημιουργία του συγκεκριμένου reference, η σύνταξη είναι η ακόλουθη:

int number ;
int& rNumber = number ;

Στην πρώτη γραμμή, παρατηρούμε τη δήλωση μίας μεταβλητής και στη δεύτερη, τη δήλωση και αντιστοίχιση ενός reference με τη μεταβλητή αυτή. Ο τύπος, όπως προαναφέρθηκε, ακολουθείται από το σύμβολο & και η επιλογή του ονόματος συνάδει με την παραπάνω πρακτική. Η αντιστοίχιση με το πρωτότυπο πραγματοποιείται με τη χρήση του τελεστή εκχώρησης και την παράθεση της αρχικής μεταβλητής.

Ο τύπος reference στη γλώσσα προγραμματισμού Cpp: σύνταξη χρήσης με παράδειγμα

Ένα reference αποτελεί -θα λέγαμε- ένα σωσία του πρωτότυπου αντικειμένου ή μεταβλητής. Κάθε πράξη που εκτελείται σε αυτό, εκτελείται και στο πρωτότυπο. Το reference κρύβει τόσο καλά τις διαφορές του με το αρχικό, που ακόμα και η αναζήτηση της διεύθυνσης μνήμης του, επιστρέφει τη διεύθυνση του πρωτοτύπου. Πιο συγκεκριμένα, η ανάκτηση της διεύθυνσης του ίδιου του reference είναι ανέφικτη. Η χρήση ενός reference, αλλά και η αδιαχώριστη σύνδεσή του με το πρωτότυπο, φαίνονται στο παράδειγμα του κυρίως προγράμματος που ακολουθεί.

int main()
{
    int number ; //1
    int& rNumber = number ; //2
    rNumber = 3; //3
    cout << “Value of prototype: ” << number << endl ; //4
    cout << “Value via reference: ” << rNumber << endl ; //5
    cout << “Address of prototype: ” << &number << endl ; //6
    cout << “Address via reference: ” << rNumber << endl ; //7
    rNumber += 2 ; //8
    cout << “Value of prototype after adding value 2: ” << number << endl ; //9
    cout << “Value via reference after adding value 2: ” << rNumber << endl //10
    return 0 ;
}

Ας μελετήσουμε τις γραμμές του κώδικα μία προς μία:

  • 1: δηλώνεται μία μεταβλητή με όνομα number, τύπου int
  • 2: δηλώνεται ένα reference με όνομα rNumber , τύπου int και ορίζεται να αναφέρεται στη μεταβλητή  number
  • 3: εκχωρείται η τιμή 3 στο reference  rNumber
  • 4: εντολή για εκτύπωση μηνύματος και τιμής της αρχικής μεταβλητής Number
  • 5: εντολή για εκτύπωση μηνύματος και τιμής του reference  rNumber
  • 6: εντολή για εκτύπωση μηνύματος και διεύθυνσης μνήμης της αρχικής μεταβλητής Number
  • 7: εντολή για εκτύπωση μηνύματος και διεύθυνσης μνήμης του reference  rNumber
  • 8: προστίθεται στην τιμή του reference  rNumber η τιμή 2
  • 9: εντολή για εκτύπωση μηνύματος και τιμής της αρχικής μεταβλητής Number, μετά την πράξη της πρόσθεσης
  • 10:  εντολή για εκτύπωση μηνύματος και τιμής του reference  rNumber , μετά την πράξη της πρόσθεσης

Το αποτέλεσμα που προκύπτει στην οθόνη είναι το εξής:

Value of prototype: 3

Value via reference: 3

Address of prototype: 0x7fff59ae6e88

Address via reference: 0x7fff59ae6e88

Value of prototype after adding value 2: 5

Value via reference after adding value 2: 5

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.