User Tools

Site Tools


cpp:copy_constructors

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
Next revisionBoth sides next revision
cpp:copy_constructors [2020/04/14 16:00] – [Μια πιο σύνθετη περίπτωση] gthanoscpp:copy_constructors [2021/05/07 07:56] – [Άλλη περίπτωση κλήσης κατασκευαστή αντιγραφέα (copy-constructor)] gthanos
Line 84: Line 84:
 </code> </code>
  
-Και οι δύο παραπάνω κατασκευαστές είναι ισοδύναμοι και δηλώνουν ένα κατασκευαστή αντιγραφέα. Στη δεύτερη περίπτωση, η μεταβλητή //r// μπορεί να δηλωθεί ως //const// διότι κατά την εκτέλεση του κατασκευαστή αντιγραφέα το αντικείμενο //r// δεν μεταβάλλεται. Συνολικά, η κλάση //Rectangle// διαμορφώνεται ως εξής:+Και οι δύο παραπάνω κατασκευαστές είναι ισοδύναμοι και δηλώνουν ένα κατασκευαστή αντιγραφέα. Η μεταβλητή //r// μπορεί να δηλωθεί ως //const// (όπως στη δεύτερη περίπτωση), διότι κατά την εκτέλεση του κατασκευαστή αντιγραφέα το αντικείμενο //r// δεν μεταβάλλεται. Συνολικά, η κλάση //Rectangle// διαμορφώνεται ως εξής:
  
 <code cpp Rectangle.hpp> <code cpp Rectangle.hpp>
Line 121: Line 121:
 } }
  
-Rectangle::Rectangle(Rectangle& r) {+Rectangle::Rectangle(const Rectangle& r) {
   cout << "Calling copy constructor" << endl;   cout << "Calling copy constructor" << endl;
   width = r.width;   width = r.width;
Line 137: Line 137:
 </WRAP> </WRAP>
  
-==== Άλλη περίπτωση κλήσης κατασκευαστή αντιγραφέα (copy-constructor) ====+==== Άλλη περίπτωση κλήσης κατασκευαστή αντιγραφέα ====
  
 Μία άλλη περίπτωση κατά την οποία θα κληθεί o κατασκευαστής αντιγραφέας είναι η παρακάτω.  Μία άλλη περίπτωση κατά την οποία θα κληθεί o κατασκευαστής αντιγραφέας είναι η παρακάτω. 
Line 153: Line 153:
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
-Το παραπάνω είναι λειτουργικά ισοδύναμο με το παρακάτω.+Το παραπάνω είναι λειτουργικά ισοδύναμο με το εξής:
 <code cpp CopyRectangle.cpp> <code cpp CopyRectangle.cpp>
 #include "Rectangle.hpp" #include "Rectangle.hpp"
Line 164: Line 164:
 </code> </code>
 Για τον μεταγλωττιστή όμως οι δύο κώδικες είναι διαφορετικοί. Στην πρώτη περίπτωση καλείται ο κατασκευαστής αντιγραφέας (//copy constructor//), ενώ στη δεύτερη περίπτωση καλείται ο //default// κατασκευαστής και στη συνέχεια γίνεται ανάθεση των τιμών των πεδίων του //r1// στα πεδία του //r2// (πεδίο προς πεδίο). Για τον μεταγλωττιστή όμως οι δύο κώδικες είναι διαφορετικοί. Στην πρώτη περίπτωση καλείται ο κατασκευαστής αντιγραφέας (//copy constructor//), ενώ στη δεύτερη περίπτωση καλείται ο //default// κατασκευαστής και στη συνέχεια γίνεται ανάθεση των τιμών των πεδίων του //r1// στα πεδία του //r2// (πεδίο προς πεδίο).
 +
 +**Σημείωση:** Κάποιες νεότερες εκδόσεις του μεταγλωττιστή εισάγουν την κλήση του κατασκευαστή αντιγραφέα και σε αυτή την περίπτωση με σκοπό τη βελτίωση της επίδοσης.
 </WRAP> </WRAP>
  
cpp/copy_constructors.txt · Last modified: 2022/05/12 19:41 by gthanos