User Tools

Site Tools


cpp:constructors

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
Last revisionBoth sides next revision
cpp:constructors [2020/04/14 07:42] – [Υπερφόρτωση κατασκευαστών] gthanoscpp:constructors [2021/05/07 07:11] – [Κατασκευαστές της κλάσης] gthanos
Line 39: Line 39:
   return 0;   return 0;
 } }
-</code> 
- 
-Για την μεταγλώττιση αρκεί να μεταγλωττισετε κάθε επιμέρους κλάση ξεχωριστά και στη συνέχεια να δημιουργήσετε το τελικό εκτελέσιμο. Στο συγκεκριμένο παράδειγμα, η διαδικασία είναι η παρακάτω και παράγει το εκτελέσιμο με όνομα **a.out**: 
-<code> 
-g++ -Wall -g Rectangle.cpp -c 
-g++ -Wall -g Rectangle.o RectangleUsage.cpp  
 </code> </code>
  
Line 60: Line 54:
 </code> </code>
 </WRAP> </WRAP>
 +
 +=== Μεταγλώττιση ===
 +
 +Για την μεταγλώττιση αρκεί να μεταγλωττίσετε κάθε επιμέρους αρχείο κλάσης ξεχωριστά και στη συνέχεια να δημιουργήσετε το τελικό εκτελέσιμο. Στο συγκεκριμένο παράδειγμα, η διαδικασία είναι η παρακάτω και παράγει το εκτελέσιμο με όνομα **a.out**:
 +<code>
 +g++ -Wall -g Rectangle.cpp -c
 +g++ -Wall -g Rectangle.o RectangleUsage.cpp 
 +</code>
 +
  
 ===== Default κατασκευαστής ===== ===== Default κατασκευαστής =====
Line 135: Line 138:
 </code> </code>
  
-Αντί για την παραπάνω δήλωση θα μπορούσατε να γράψετε ισοδύναμα:+Αντί για την παραπάνω δήλωση θα μπορούσατε να γράψετε __ισοδύναμα__:
 <code cpp> <code cpp>
 Rectangle::Rectangle(int w, int h) : width(w) { Rectangle::Rectangle(int w, int h) : width(w) {
Line 141: Line 144:
 } }
 </code> </code>
-ή+ή __ισοδύναμα__
 <code cpp> <code cpp>
 Rectangle::Rectangle(int w, int h) : width(w), height(h) {} Rectangle::Rectangle(int w, int h) : width(w), height(h) {}
 </code> </code>
  
-Τελικά η κλάση Rectangle μπορεί να γραφεί ως εξής:+Ο παραπάνω τρόπος γραφής ονομάζεται στη βιβλιογραφία __//member initilization list//__. Τελικά η κλάση Rectangle μπορεί να γραφεί με χρήση //member initilization list// όπως παρακάτω:
  
 <code cpp Rectangle.hpp> <code cpp Rectangle.hpp>
Line 166: Line 169:
     int getHeight() const;     int getHeight() const;
 }; };
 +</code>
 +
 +<code cpp Rectangle.cpp>
 +#include "Rectangle.hpp"
  
 Rectangle::Rectangle(int w, int h) : width(w), height(h) { Rectangle::Rectangle(int w, int h) : width(w), height(h) {
Line 186: Line 193:
 ===== Κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή ===== ===== Κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή =====
  
-Συχνά μπορεί να θέλουμε να καλέσουμε μέσα από ένα κατασκευαστή έναν άλλο κατασκευαστή. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας ως οποιαδήποτε άλλη μέθοδο. Στο προηγούμενο παράδειγμα, ο κατασκευαστής με τη μία παράμετρο καλεί εσωτερικά τον κατασκευαστή με τις δύο παραμέτρους ως εξής:+Συχνά μπορεί να θέλουμε να καλέσουμε μέσα από ένα κατασκευαστή έναν άλλο κατασκευαστή. Μπορείτε να το κάνετε αυτό όπως καλείτε οποιαδήποτε άλλη μέθοδο. Στο προηγούμενο παράδειγμα, ο κατασκευαστής με τη μία παράμετρο καλεί εσωτερικά τον κατασκευαστή με τις δύο παραμέτρους ως εξής:
  
 <code cpp> <code cpp>
Line 194: Line 201:
 </code> </code>
  
-ίδιος κώδικας με χρήση //initialization list// μπορεί να γραφεί ως εξής:+Ο ίδιος κώδικας με χρήση //member initialization list// μπορεί να γραφεί ως εξής:
  
 <code cpp> <code cpp>
Line 203: Line 210:
 ===== Αρχικοποίηση αντικειμένων που περιέχουν πεδία που περιγράφονται από κλάσεις ===== ===== Αρχικοποίηση αντικειμένων που περιέχουν πεδία που περιγράφονται από κλάσεις =====
  
-Στην προηγούμενη ενότητα είδαμε την κλάση Cuboid που περιγράφει την κλάση του κυβοειδούς και περιέχει ένα πεδίο τύπου Rectangle. Εδώ θα δούμε πως μπορούμε να ορίσουμε ένα ή περισσότερους κατασκευαστές για τη συγκεκριμένη κλάση.+Στην προηγούμενη ενότητα είδαμε την κλάση Cuboid που περιγράφει την κλάση του κυβοειδούς και περιέχει ένα πεδίο τύπου Rectangle. Εδώ θα δούμε πως μπορούμε να ορίσουμε ένα ή περισσότερους κατασκευαστές για την κλάση του κυβοειδούς.
  
 <code cpp Cuboid.hpp> <code cpp Cuboid.hpp>
Line 251: Line 258:
 </code> </code>
  
-Οι παραπάνω δύο κατασκευαστές με χρήση member initialιzation list μπορούν να γραφούν ως εξής:+Οι παραπάνω δύο κατασκευαστές με χρήση //member initialιzation list// μπορούν να γραφούν ως εξής:
  
 <code> <code>
Line 258: Line 265:
 </code> </code>
  
-Στον πρώτο κατασκευαστή με τα δύο ορίσματα γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//, αντιγράφοντας την τιμή κάθε πεδίου της παραμέτρου //r// στο πεδίιο //rect//. Στον 2ο κατασκευαστή με τα τρία ορίσματα καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//.+Στον πρώτο κατασκευαστή με τα δύο ορίσματα γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//, αντιγράφοντας κάθε πεδίο της παραμέτρου //r// στο αντίστοιχο πεδίο του //rect//. Στον δεύτερο κατασκευαστή με τα τρία ορίσματα καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//.
  
  
cpp/constructors.txt · Last modified: 2021/05/07 06:11 (external edit)