This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
cpp:object_creation [2020/04/08 13:56] gthanos [Εναλλακτικοί τρόποι κλήσης του κατασκευαστή της κλάσης] |
cpp:object_creation [2020/04/08 14:35] gthanos [Δημίουργία αντικείμένων στο Heap] |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| Η δημιουργία αντικειμένων γίνεται με κλήση του αντίστοιχου κατασκευαστή ως εξής: | Η δημιουργία αντικειμένων γίνεται με κλήση του αντίστοιχου κατασκευαστή ως εξής: | ||
| - | <code c++ Rectangle.cpp> | + | <code c++ Rectangle.hpp> |
| #include < | #include < | ||
| using namespace std; | using namespace std; | ||
| Line 13: | Line 13: | ||
| Rectangle(int s); | Rectangle(int s); | ||
| Rectangle(); | Rectangle(); | ||
| + | ~Rectangle(); | ||
| int getWidth() const; | int getWidth() const; | ||
| int getHeight() const; | int getHeight() const; | ||
| Line 19: | Line 20: | ||
| }; | }; | ||
| - | Rectangle:: | + | Rectangle:: |
| - | Rectangle:: | + | std::cout << " |
| - | Rectangle:: | + | } |
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| + | |||
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| int Rectangle:: | int Rectangle:: | ||
| Line 27: | Line 38: | ||
| void Rectangle:: | void Rectangle:: | ||
| void Rectangle:: | void Rectangle:: | ||
| + | </ | ||
| + | <code cpp RectangleUsage.cpp> | ||
| int main() { | int main() { | ||
| Rectangle rect1(3,4); | Rectangle rect1(3,4); | ||
| Line 95: | Line 108: | ||
| Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, | Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, | ||
| + | ===== Δημίουργία αντικείμένων στο Heap ===== | ||
| + | |||
| + | Τα παραδείγματα που είδαμε μέχρι τώρα δημιουργούν αντικείμενα μέσα στο //stack// της διεργασίας. Εάν θέλουμε να δημιουργήσουμε αντικείμενα τα οποία είναι αποθηκευμένα στο //heap//, δηλαδή δεσμεύεται δυναμικά μνήμη για αυτά, θα πρέπει να το κάνουμε μέσω του τελεστή [[cpp: | ||
| + | |||
| + | <code cpp RectangleInHeap.cpp> | ||
| + | #include " | ||
| + | |||
| + | int main () { | ||
| + | Rectangle *rect; | ||
| + | rect = new Rectangle(5, | ||
| + | // και αρχικοποίηση του με τιμές width=5, height=6. | ||
| + | /* | ||
| + | * do fancy things here... | ||
| + | */ | ||
| + | |||
| + | delete rect; // Απελευθέρωση της μνήμης που δεσμεύτηκε προηγούμενα. | ||
| + | // Καλείται ο καταστροφέας της κλάσης εάν υπάρχει. | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Όταν ολοκληρωθεί ο κύκλος ζωής του αντικειμένου θα πρέπει να διαγραφεί το αντικείμενο μέσω του τελεστή //delete//. Η χρήση του τελεστή //delete// καλεί πριν την καταστροφή του αντικειμένου τον καταστροφέα της κλάσης. Κατεβάστε και μεταγλωττίστε τον παραπάνω κώδικα για να δείτε τα μηνύματα που εκτυπώνονται. | ||