ερώτηση

Γνώση Υπολογιστών >> ερώτηση >  >> Μετατρέψτε τα αρχεία

Αποστολή με αντίγραφο και αποστολή αναφοράς;

Στον αντικειμενοστραφή προγραμματισμό, τα "pass by copy" και "pass by reference" αναφέρονται σε διαφορετικούς τρόπους μετάδοσης ορισμάτων σε συναρτήσεις ή μεθόδους. Ωστόσο, η ορολογία ποικίλλει ανάλογα με τη γλώσσα και το πλαίσιο.

Αντιγραφή:

- Επιχειρήματα που διαβιβάστηκαν ως αντίγραφα: Διαβαίνοντας αντίγραφο, δημιουργείται ένα αντίγραφο του πραγματικού ορίσματος και μεταβιβάζεται στη συνάρτηση. Οποιαδήποτε τροποποίηση γίνει σε αυτό το αντίγραφο εντός της συνάρτησης δεν επηρεάζει την αρχική μεταβλητή εκτός της συνάρτησης.

- Τύποι τιμών: Το Pass by copy χρησιμοποιείται συνήθως με τύπους τιμών, οι οποίοι είναι τύποι δεδομένων που διατηρούν απευθείας την αξία τους. Για παράδειγμα, στη C++ ή την Java, τα int, double, boolean κ.λπ. είναι τύποι τιμών.

Παράβαση αναφοράς:

- Επιχειρήματα ως αναφορές: Σε pass by reference, μια αναφορά στο πραγματικό όρισμα μεταβιβάζεται στη συνάρτηση. Οποιεσδήποτε αλλαγές γίνονται στο όρισμα μέσα στη συνάρτηση αντικατοπτρίζονται απευθείας στην αρχική μεταβλητή έξω από τη συνάρτηση.

- Τύποι αναφοράς: Το Pass by reference χρησιμοποιείται συχνά με τύπους αναφοράς, οι οποίοι είναι τύποι δεδομένων που περιέχουν αναφορά σε μια θέση μνήμης όπου αποθηκεύονται τα πραγματικά δεδομένα. Για παράδειγμα, στη C++ και την Java, τα αντικείμενα (στιγμιότυπα κλάσεων) είναι τύποι αναφοράς.

Σε ορισμένες γλώσσες, η συμπεριφορά μπορεί να ελεγχθεί ρητά χρησιμοποιώντας λέξεις-κλειδιά όπως "pass by reference" ή "&" (για παραμέτρους αναφοράς) και "pass by value" ή "*" (για παραμέτρους τιμής).

Για παράδειγμα, στη C++:

``` cpp

void increment(int value) { // pass by value

τιμή++; // τροποποιεί το αντίγραφο

}

void incrementRef(int &value) { // pass by reference

τιμή++; // τροποποιεί την αρχική μεταβλητή

}

int main() {

int x =5; // τύπος τιμής

increment(x); // x παραμένει 5

incrementRef(x); // το x γίνεται 6

}

```

Σε Java:

```java

public void increment(int value) { // pass by value

τιμή++; // τροποποιεί το αντίγραφο

}

δημόσιο κενό incrementRef(int &value) { // pass by reference

τιμή++; // τροποποιεί την αρχική μεταβλητή

}

δημόσιο στατικό κενό main(String[] args) {

int x =5; // τύπος πρωταρχικής τιμής

increment(x); // x παραμένει 5

incrementRef(x); // το x γίνεται 6

}

```

Στην Python, τα ορίσματα περνούν πάντα με αναφορά. Ωστόσο, η Python χρησιμοποιεί έναν μηχανισμό μέτρησης αναφοράς για τη διαχείριση της διάρκειας ζωής του αντικειμένου και μπορείτε να δημιουργήσετε αντίγραφα που είναι ανεξάρτητα από τον αριθμό αναφορών του αρχικού αντικειμένου.

Η κατανόηση pass by copy και pass by reference βοηθά στην αποτελεσματική διαχείριση της μνήμης, στην αποφυγή ανεπιθύμητων τροποποιήσεων και στη διασφάλιση της σωστής συμπεριφοράς των συναρτήσεων/μεθόδων που λειτουργούν σε ορίσματα.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα