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 [2019/04/19 09:59] – [Μια πιο σύνθετη περίπτωση] gthanoscpp:copy_constructors [2020/04/12 16:02] gthanos
Line 6: Line 6:
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
-#include "Rectangle.cpp"+#include "Rectangle.hpp"
  
 void printArea(const Rectangle r) { void printArea(const Rectangle r) {
Line 27: Line 27:
  
 <code cpp> <code cpp>
-Rectangle::Rectangle(const Rectangle &r) {+Rectangle::Rectangle(Rectangle &r) {
   width = r.width; height = r.height;   width = r.width; height = r.height;
 } }
Line 97: Line 97:
  
 <code cpp CopyRectangle.cpp> <code cpp CopyRectangle.cpp>
-#include "Rectangle.cpp"+#include "Rectangle.hpp"
  
 int main() { int main() {
Line 108: Line 108:
 Το παραπάνω είναι λειτουργικά ισοδύναμο με το παρακάτω. Το παραπάνω είναι λειτουργικά ισοδύναμο με το παρακάτω.
 <code cpp CopyRectangle.cpp> <code cpp CopyRectangle.cpp>
-#include "Rectangle.cpp"+#include "Rectangle.hpp"
  
 int main() { int main() {
Line 123: Line 123:
 Στις περιπτώσεις που υπάρχουν πεδία δείκτες που δείχνουν σε άλλα αντικείμενα (στατικά ή δυναμικά δεσμευμένα) αντιγράφονται οι διευθύνσεις αυτές, όπως θα αντιγράφονταν οποιοδήποτε άλλο πεδίο. Αυτό πρακτικά σημαίνει ότι δύο ή περισσότερα αντικείμενα δείχνουν σε μία κοινή περιοχή μνήμης. Το παραπάνω μπορεί να προκαλέσει δυσλειτουργίες, καθώς η μεταβολή του κοινού αντικειμένου επηρεάζει το σύνολο των αντικειμένων που το μοιράζονται. Στις περιπτώσεις που υπάρχουν πεδία δείκτες που δείχνουν σε άλλα αντικείμενα (στατικά ή δυναμικά δεσμευμένα) αντιγράφονται οι διευθύνσεις αυτές, όπως θα αντιγράφονταν οποιοδήποτε άλλο πεδίο. Αυτό πρακτικά σημαίνει ότι δύο ή περισσότερα αντικείμενα δείχνουν σε μία κοινή περιοχή μνήμης. Το παραπάνω μπορεί να προκαλέσει δυσλειτουργίες, καθώς η μεταβολή του κοινού αντικειμένου επηρεάζει το σύνολο των αντικειμένων που το μοιράζονται.
  
-Στο παρακάτω παράδειγμα ορίζουμε την κλάση //Point// η οποία αντιπροσωπεύει ένα σημείο στο διδιάστατο χώρο.+Στο παρακάτω παράδειγμα ορίζουμε την κλάση //Point// η οποία αντιπροσωπεύει ένα σημείο στο δισδιάστατο χώρο.
  
 <code cpp Point.hpp> <code cpp Point.hpp>
Line 156: Line 156:
 </code> </code>
  
-Η κλάση //Rectangle// που ακολουθεί ορίζει ένα πεδίο δείκτη σε αντικείμενα τύπου //Point//. Η δημιουργία ενός αντικειμένου τύπου //Rectangle// συνεπάγεται τη δυναμική δέσμευση μνήμης για το αντικείμενο τύπου //Point// που αυτή περιέχει. Δείτε το παράδειγμα που ακολουθεί.+Η κλάση //Rectangle// που ακολουθεί ορίζει το πεδίο //origin// που είναι δείκτης σε ένα αντικείμενο τύπου //Point//. Η δημιουργία ενός αντικειμένου τύπου //Rectangle// συνεπάγεται τη δυναμική δέσμευση μνήμης για το αντικείμενο τύπου //Point// που αυτή περιέχει. Δείτε το παράδειγμα που ακολουθεί.
  
 <code cpp Rectangle.hpp> <code cpp Rectangle.hpp>
Line 259: Line 259:
     }     }
   }   }
 +}
 </code>  </code> 
  
cpp/copy_constructors.txt · Last modified: 2022/05/12 19:41 by gthanos