Next revision | Previous revisionNext revisionBoth sides next revision |
cpp:constructors [2020/04/08 10:34] – created gthanos | cpp:constructors [2020/04/12 15:30] – [Αρχικοποίηση αντικειμένων που περιέχουν πεδία που περιγράφονται από κλάσεις] gthanos |
---|
====== Κατασκευαστές και καταστροφείς της κλάσης ====== | ====== Κατασκευαστές της κλάσης ====== |
| |
Στο προηγούμενο παράδειγμα της κλάσης //Rectangle// δεν δηλώθηκε κάποιος κατασκευαστής. Ο κατασκευαστής της κλάσης είναι μέθοδος που έχει το όνομα της κλάσης και δεν έχει επιστρεφόμενο τύπο. Ο ρόλος του κατασκευαστή της κλάσης είναι να αρχικοποιήσει τις τιμές των πεδίων της κλάσης. Σημειώστε, ότι ο κατασκευαστής της κλάσης στη C++ δεν δεσμεύει χώρο στη μνήμη, όπως συμβαίνει στη Java. Για την κλάση //Rectangle//, παρακάτω δηλώνεται ο κατασκευαστής ''Rectangle(int w, int h)''. | Στο προηγούμενο παράδειγμα της κλάσης //Rectangle// δεν δηλώθηκε κάποιος κατασκευαστής. Ο κατασκευαστής της κλάσης είναι μέθοδος που έχει το όνομα της κλάσης και δεν έχει επιστρεφόμενο τύπο. Ο ρόλος του κατασκευαστή της κλάσης είναι να αρχικοποιήσει τις τιμές των πεδίων της κλάσης. Σημειώστε, ότι ο κατασκευαστής της κλάσης στη C++ δεν δεσμεύει χώρο στη μνήμη, όπως συμβαίνει στη Java. Για την κλάση //Rectangle//, παρακάτω δηλώνεται ο κατασκευαστής ''Rectangle(int w, int h)''. |
| |
<code> | <code> |
Cuboid::Cuboid(Rectangle r, int l) : rect(r), length(l) { } | Cuboid::Cuboid(Rectangle r, int l) : rect(r), length(l) { } |
Cuboid::Cuboid(int w, int h, int l) : rect(w,h), length(l) { } | Cuboid::Cuboid(int w, int h, int l) : rect(w,h), length(l) { } |
</code> | </code> |
| |
Στην 1η περίπτωση γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//. Στην 2η περίπτωση καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//. | Στον πρώτο κατασκευαστή με τα δύο ορίσματα γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//, αντιγράφοντας την τιμή κάθε πεδίου της παραμέτρου //r// στο πεδίιο //rect//. Στον 2ο κατασκευαστή με τα τρία ορίσματα καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//. |
| |
Η ανάθεση ''rect = r;'' δεν είναι προφανής. Έχοντας δύο αντικείμενα τύπου Rectangle το ''rect'' και το ''r'', η εντολή ανάθεσης αντιγράφει τα περιεχόμενα του ''r'' στο ''rect'' πεδίο προς πεδίο. | |
| |
| |