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
cpp:constructors [2020/04/14 07:36] gthanoscpp:constructors [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 54: 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 65: Line 74:
 ===== Υπερφόρτωση κατασκευαστών ===== ===== Υπερφόρτωση κατασκευαστών =====
  
-Σε αναλογία με την [[cpp:functions#υπερφόρτωση_συναρτήσεων|υπερφόρτωση συναρτήσεων]] η C++ υποστηρίζει και υπερφόρτωση κατασκευαστών. Συγκεκριμένα, μπορείτε να έχετε περισσότερους από έναν κατασκευαστές αρκεί αυτοί να έχουν διαφορετικό αριθμό ή τύπο ορισμάτων. Δείτε το παρακάτω παράδειγμα της κλάση //Rectangle//, όπου δίνονται δύο επιπλέον κατασκευαστές, ένα κατασκευαστή που λαμβάνει ένα κοινό όρισμα και για τις δύο διαστάσεις του παραλληλογράμμου και ένα κατασκευαστή χωρίς ορίσματα που αναθέτει τυχαίες τιμές στις διαστάσεις του παραλληλογράμμου.+Σε αναλογία με την [[cpp:functions#υπερφόρτωση_συναρτήσεων|υπερφόρτωση συναρτήσεων]] η C++ υποστηρίζει και υπερφόρτωση κατασκευαστών. Συγκεκριμένα, μπορείτε να έχετε περισσότερους από έναν κατασκευαστές αρκεί αυτοί να έχουν διαφορετικό αριθμό ή τύπο ορισμάτων. Δείτε το παρακάτω παράδειγμα της κλάση //Rectangle//, όπου δίνονται δύο επιπλέον κατασκευαστές, ένας κατασκευαστής που λαμβάνει ένα κοινό όρισμα και για τις δύο διαστάσεις του παραλληλογράμμου δημιουργώντας ένα τετράγωνο και ένας κατασκευαστής χωρίς ορίσματα που αναθέτει τυχαίες τιμές στα μήκη των πλευρών του παραλληλογράμμου.
  
 <code cpp Rectangle.hpp> <code cpp Rectangle.hpp>
Line 85: Line 94:
     int getHeight() const;     int getHeight() const;
 }; };
 +</code>
 +
 +<code cpp Rectangle.cpp>
 +#include "Rectangle.hpp"
  
 Rectangle::Rectangle(int w, int h) { Rectangle::Rectangle(int w, int h) {
Line 125: 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 131: 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 156: 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 176: Line 193:
 ===== Κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή ===== ===== Κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή =====
  
-Συχνά μπορεί να θέλουμε να καλέσουμε μέσα από ένα κατασκευαστή έναν άλλο κατασκευαστή. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας ως οποιαδήποτε άλλη μέθοδο. Στο προηγούμενο παράδειγμα, ο κατασκευαστής με τη μία παράμετρο καλεί εσωτερικά τον κατασκευαστή με τις δύο παραμέτρους ως εξής:+Συχνά μπορεί να θέλουμε να καλέσουμε μέσα από ένα κατασκευαστή έναν άλλο κατασκευαστή. Μπορείτε να το κάνετε αυτό όπως καλείτε οποιαδήποτε άλλη μέθοδο. Στο προηγούμενο παράδειγμα, ο κατασκευαστής με τη μία παράμετρο καλεί εσωτερικά τον κατασκευαστή με τις δύο παραμέτρους ως εξής:
  
 <code cpp> <code cpp>
Line 184: Line 201:
 </code> </code>
  
-ίδιος κώδικας με χρήση //initialization list// μπορεί να γραφεί ως εξής:+Ο ίδιος κώδικας με χρήση //member initialization list// μπορεί να γραφεί ως εξής:
  
 <code cpp> <code cpp>
Line 193: Line 210:
 ===== Αρχικοποίηση αντικειμένων που περιέχουν πεδία που περιγράφονται από κλάσεις ===== ===== Αρχικοποίηση αντικειμένων που περιέχουν πεδία που περιγράφονται από κλάσεις =====
  
-Στην προηγούμενη ενότητα είδαμε την κλάση Cuboid που περιγράφει την κλάση του κυβοειδούς και περιέχει ένα πεδίο τύπου Rectangle. Εδώ θα δούμε πως μπορούμε να ορίσουμε ένα ή περισσότερους κατασκευαστές για τη συγκεκριμένη κλάση.+Στην προηγούμενη ενότητα είδαμε την κλάση Cuboid που περιγράφει την κλάση του κυβοειδούς και περιέχει ένα πεδίο τύπου Rectangle. Εδώ θα δούμε πως μπορούμε να ορίσουμε ένα ή περισσότερους κατασκευαστές για την κλάση του κυβοειδούς.
  
 <code cpp Cuboid.hpp> <code cpp Cuboid.hpp>
Line 241: Line 258:
 </code> </code>
  
-Οι παραπάνω δύο κατασκευαστές με χρήση member initialιzation list μπορούν να γραφούν ως εξής:+Οι παραπάνω δύο κατασκευαστές με χρήση //member initialιzation list// μπορούν να γραφούν ως εξής:
  
 <code> <code>
Line 248: Line 265:
 </code> </code>
  
-Στον πρώτο κατασκευαστή με τα δύο ορίσματα γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//, αντιγράφοντας την τιμή κάθε πεδίου της παραμέτρου //r// στο πεδίιο //rect//. Στον 2ο κατασκευαστή με τα τρία ορίσματα καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//.+Στον πρώτο κατασκευαστή με τα δύο ορίσματα γίνεται ανάθεση του αντικειμένου //r// στο πεδίο //rect//, αντιγράφοντας κάθε πεδίο της παραμέτρου //r// στο αντίστοιχο πεδίο του //rect//. Στον δεύτερο κατασκευαστή με τα τρία ορίσματα καλείται ο κατασκευαστής της κλάσης //Rectangle// με ορίσματα //(w,h)//.
  
  
cpp/constructors.1586849803.txt.gz · Last modified: 2020/04/14 06:36 (external edit)