cpp:object_creation
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
cpp:object_creation [2019/04/19 09:27] – gthanos | cpp:object_creation [2020/04/08 14:34] – gthanos | ||
---|---|---|---|
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 40: | Line 53: | ||
Παρατηρήστε ότι για το τελευταίο αντικείμενο δεν χρησιμοποιούνται παρενθέσεις κατά την κλήση του καστασκευαστή, | Παρατηρήστε ότι για το τελευταίο αντικείμενο δεν χρησιμοποιούνται παρενθέσεις κατά την κλήση του καστασκευαστή, | ||
<code c++> | <code c++> | ||
- | Rectangle rect3(); | + | Rectangle rect3(); |
</ | </ | ||
- | Η χρήση παρενθέσεων είναι | + | Η χρήση παρενθέσεων δεν είναι απαραίτητη, αλλά ούτε και λανθασμένη (έκδοση g++ 7.x.x) |
</ | </ | ||
Line 84: | Line 97: | ||
<code c++ RectangleInitialization.cpp> | <code c++ RectangleInitialization.cpp> | ||
int main () { | int main () { | ||
- | Rectangle rect = {5,6}; // calls Rectangle(int w, int h) | + | Rectangle rect = {5, |
- | Rectangle rects[2] = {{4,5}, {5,6}}; // calls Rectangle(int w, int h) for each table element | + | Rectangle rects[2] = {{4,5}, {5,6}}; // καλεί |
cout << " | cout << " | ||
cout << " | cout << " | ||
Line 93: | Line 106: | ||
</ | </ | ||
- | Οι παραπάνω | + | Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, |
+ | |||
+ | ===== Δημίουργία αντικείμένων στο 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// καλεί πριν την καταστροφή του αντικειμένου τον καταστροφέα της κλάσης. | ||
cpp/object_creation.txt · Last modified: 2021/05/07 06:22 (external edit)