cpp:object_creation
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| cpp:object_creation [2020/04/08 13:56] – [Εναλλακτικοί τρόποι κλήσης του κατασκευαστή της κλάσης] gthanos | cpp:object_creation [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| 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 18: | Line 19: | ||
| void setHeight(int h); | void setHeight(int h); | ||
| }; | }; | ||
| + | </ | ||
| - | Rectangle:: | + | <code cpp Rectangle.cpp> |
| - | Rectangle:: | + | #include " |
| - | Rectangle:: | + | |
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| + | |||
| + | Rectangle:: | ||
| + | std::cout << " | ||
| + | } | ||
| int Rectangle:: | int Rectangle:: | ||
| Line 27: | Line 42: | ||
| void Rectangle:: | void Rectangle:: | ||
| void Rectangle:: | void Rectangle:: | ||
| + | </ | ||
| + | |||
| + | <code cpp RectangleUsage.cpp> | ||
| + | #include " | ||
| int main() { | int main() { | ||
| Line 35: | Line 54: | ||
| </ | </ | ||
| - | Ο παραπάνω κώδικας δημιουργεί 3 αντικείμενα της κλάσης // | + | Ο παραπάνω κώδικας δημιουργεί |
| <WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
| Line 42: | Line 61: | ||
| Rectangle rect3(); | Rectangle rect3(); | ||
| </ | </ | ||
| - | Η χρήση παρενθέσεων δεν είναι απαραίτητη, | + | Η χρήση παρενθέσεων δεν είναι απαραίτητη, |
| </ | </ | ||
| Line 95: | Line 114: | ||
| Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, | Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, | ||
| + | ===== Δημιουργία αντικειμένων μέσω δυναμικής δέσμευσης της απαιτούμενης μνήμης ===== | ||
| + | |||
| + | Τα παραδείγματα που είδαμε μέχρι τώρα δημιουργούν αντικείμενα μέσα στο //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// καλεί πριν την καταστροφή του αντικειμένου τον καταστροφέα της κλάσης. Κατεβάστε και μεταγλωττίστε τον παραπάνω κώδικα για να δείτε τα μηνύματα που εκτυπώνονται. | ||
cpp/object_creation.1586354194.txt.gz · Last modified: 2020/04/08 12:56 (external edit)
