User Tools

Site Tools


cpp:object_creation

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
cpp:object_creation [2020/04/08 14:30] – ρε gthanoscpp:object_creation [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 19: Line 19:
     void setHeight(int h);     void setHeight(int h);
 }; };
 +</code>
  
-Rectangle::Rectangle(int w, int h): width(w), height(h) {} +<code cpp Rectangle.cpp> 
-Rectangle::Rectangle(int s) : width(s), height(s) {} +#include "Rectangle.hpp" 
-Rectangle::Rectangle(): width(0), height(0) {}+ 
 +Rectangle::Rectangle(int w, int h): width(w), height(h) { 
 +  std::cout << "Constructor with 2 parameters!\n"; 
 +
 +Rectangle::Rectangle(int s) : width(s), height(s) { 
 +  std::cout << "Constructor with 1 parameter!\n"; 
 +
 +Rectangle::Rectangle(): width(0), height(0) { 
 +  std::cout << "Constructor with 0 parameters!\n"; 
 +}
  
 Rectangle::~Rectangle() { Rectangle::~Rectangle() {
Line 32: Line 42:
 void Rectangle::setWidth(int w) { width = w; } void Rectangle::setWidth(int w) { width = w; }
 void Rectangle::setHeight(int h) { height = h; } void Rectangle::setHeight(int h) { height = h; }
- 
 </code> </code>
  
 <code cpp RectangleUsage.cpp> <code cpp RectangleUsage.cpp>
 +#include "Rectangle.hpp"
 +
 int main() { int main() {
   Rectangle rect1(3,4);   Rectangle rect1(3,4);
Line 43: Line 54:
 </code> </code>
  
-Ο παραπάνω κώδικας δημιουργεί 3 αντικείμενα της κλάσης //Rectangle// το αντικείμενο //rect1// με πλευρές 3 και 4, το //rect2// με πλευρές κοινού μήκους 5 και το αντικείμενο //rect3// που έχει μηδενικές τιμές. +Ο παραπάνω κώδικας δημιουργεί τρία (3αντικείμενα της κλάσης //Rectangle// το αντικείμενο //rect1// με πλευρές 3 και 4, το //rect2// με πλευρές κοινού μήκους 5 και το αντικείμενο //rect3// που έχει μηδενικές τιμές. 
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
Line 50: Line 61:
 Rectangle rect3(); Rectangle rect3();
 </code>  </code> 
-Η χρήση παρενθέσεων δεν είναι απαραίτητη, αλλά ούτε και λανθασμένη (έκδοση g++ 7.x.x)+Η χρήση παρενθέσεων δεν είναι απαραίτητη, αλλά ούτε και λανθασμένη (έκδοση g++ 7.x.x ή νεότερη)
 </WRAP> </WRAP>
  
Line 103: Line 114:
 Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, μόνο η χρήση του τελεστή ίσον ('=') πριν από τα άγκιστρα επιτρέπει την παραπάνω αρχικοποίηση σε μία εντολή. Οι παραπάνω τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, μόνο η χρήση του τελεστή ίσον ('=') πριν από τα άγκιστρα επιτρέπει την παραπάνω αρχικοποίηση σε μία εντολή.
  
-===== Δημίουργία αντικείμένων στο Heap =====+===== Δημιουργία αντικειμένων μέσω δυναμικής δέσμευσης της απαιτούμενης μνήμης =====
  
 Τα παραδείγματα που είδαμε μέχρι τώρα δημιουργούν αντικείμενα μέσα στο //stack// της διεργασίας. Εάν θέλουμε να δημιουργήσουμε αντικείμενα τα οποία είναι αποθηκευμένα στο //heap//, δηλαδή δεσμεύεται δυναμικά μνήμη για αυτά, θα πρέπει να το κάνουμε μέσω του τελεστή [[cpp:dynamic_memory|**new** που είδαμε προηγούμενα]] ως εξής: Τα παραδείγματα που είδαμε μέχρι τώρα δημιουργούν αντικείμενα μέσα στο //stack// της διεργασίας. Εάν θέλουμε να δημιουργήσουμε αντικείμενα τα οποία είναι αποθηκευμένα στο //heap//, δηλαδή δεσμεύεται δυναμικά μνήμη για αυτά, θα πρέπει να το κάνουμε μέσω του τελεστή [[cpp:dynamic_memory|**new** που είδαμε προηγούμενα]] ως εξής:
  
-<code cpp RectangleInitialization.cpp>+<code cpp RectangleInHeap.cpp> 
 +#include "Rectangle.hpp" 
 int main () { int main () {
   Rectangle *rect;         Rectangle *rect;      
Line 122: Line 135:
 </code> </code>
  
-Όταν ολοκληρωθεί ο κύκλος ζωής του αντικειμένου θα πρέπει να διαγραφεί το αντικείμενο μέσω του τελεστή //delete//. Η χρήση του τελεστή //delete// καλεί πριν την καταστροφή του αντικειμένου τον καταστροφέα της κλάσης.+Όταν ολοκληρωθεί ο κύκλος ζωής του αντικειμένου θα πρέπει να διαγραφεί το αντικείμενο μέσω του τελεστή //delete//. Η χρήση του τελεστή //delete// καλεί πριν την καταστροφή του αντικειμένου τον καταστροφέα της κλάσης. Κατεβάστε και μεταγλωττίστε τον παραπάνω κώδικα για να δείτε τα μηνύματα που εκτυπώνονται.
  
cpp/object_creation.1586356242.txt.gz · Last modified: 2020/04/08 13:30 (external edit)