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 revisionBoth sides next revision
cpp:copy_constructors [2017/04/20 12:20] – [Ορισμός ενός κατασκευαστή αντιγραφέα] gthanoscpp:copy_constructors [2017/04/20 12:46] – [Δημιουργία κατασκευαστών αντιγραφέων] gthanos
Line 164: Line 164:
 int Rectangle::getWidth() { return width; } int Rectangle::getWidth() { return width; }
 int Rectangle::getHeight() { return height; } int Rectangle::getHeight() { return height; }
 +void Rectangle::setOrigin(Point *p) { origin = p; }
 +Point *Rectangle::getOrigin() { return origin; }
 </code> </code>
  
Line 170: Line 172:
 #include "Rectangle.cpp" #include "Rectangle.cpp"
  
 +int moveOrigin(Rectangle &r, int dx, int dy) { 
 +  Point *p = r.getOrigin(); 
 +  p->setX(p->getX() + dx); 
 +  p->setY(p->getY() + dy); 
 +}
  
 int main() { int main() {
   Point *p = new Point(10,5);   Point *p = new Point(10,5);
-  Rectangle r1(5,6,p);+  Rectangle r1(5,6,p);   
 +  Rectangle r2 = r1;
      
-  Rectangle rect(5,6,4,1);+  moveOrigin(r11,-1);
 } }
- 
 </code> </code>
 +
 +Ο παραπάνω κώδικας αντιγράφει στο αντικείμενο //r2// τα πεδία του αντικειμένου //r1// πεδίο προς πεδίο. Αυτό σημαίνει ότι τα αντικείμενα //r1// και //r2// μοιράζονται το ίδιο αντικείμενο τύπου //Point//. Εάν μεταβληθούν οι συντεταγμένες του //Point// από το αντικείμενο //r1//, η μεταβολή θα ισχύει και για το αντικείμενο //r2//. Εάν θέλετε να αποφύγετε αυτή τη συμπεριφορά θα πρέπει να ορίσετε τον δικό σας κατασκευαστή αντιγραφέα που κάνει τα εξής:
 +  - Δημιουργεί ένα νέο αντικείμενο τύπου //Point//.
 +  - Αντιγράφει τα περιεχόμενα του παλιού στο νέο.
 +Ο προτεινόμενος κατασκευαστής αντιγραφέας δίνεται παρακάτω:
 +<code cpp>
 +Rectangle::Rectangle(Rectangle &r) {
 +  width = r.width;
 +  height = r.height;
 +  origin = new (nothrow) Point(r.getOrigin()->getX(), r.getOrigin()->getY());
 +  if(origin == NULL) {
 +    cerr << "Memory allocation failure!";
 +    exit(-1);
 +  }
 +}
 +</code> 
 +
  
  
cpp/copy_constructors.txt · Last modified: 2022/05/12 19:41 by gthanos