User Tools

Site Tools


cpp:object_creation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
cpp:object_creation [2017/04/16 02:57] – created gthanoscpp:object_creation [2017/04/16 05:41] – [Άλλοι τρόποι κλήσης του κατασκευαστή της κλάσης] gthanos
Line 1: Line 1:
 ====== Δημιουργία αντικειμένων ====== ====== Δημιουργία αντικειμένων ======
 +
 +Η δημιουργία αντικειμένων γίνεται με κλήση του αντίστοιχου κατασκευαστή ως εξής:
 +<code c++>
 +Rectangle rect1(3,4);
 +Rectangle rect2(5);
 +Rectangle rect3;
 +</code>
 +
 +Ο παραπάνω κώδικας δημιουργεί 3 αντικείμενα της κλάσης //Rectangle// το αντικείμενο //rect1// με πλευρές 3 και 4, το //rect2// με πλευρές κοινού μήκους 5 και το αντικείμενο //rect3// που λαμβάνει τυχαίες τιμές. 
 +
 +<WRAP center round tip 80%>
 +Παρατηρήστε ότι για το τελευταίο αντικείμενο δεν χρησιμοποιούνται παρενθέσεις κατά την κλήση του καστασκευαστή, όπως πιθανόν θα περιμένατε
 +<code c++>
 +Rectangle rect3(); // this is an error
 +</code> 
 +Η χρήση παρενθέσεων είναι λανθασμένη με συνέπεια να λάγετε μήνυμα λάθους από τον μεταγλωττιστή.
 +</WRAP>
 +
 +===== Άλλοι τρόποι κλήσης του κατασκευαστή της κλάσης =====
 +
 +Εκτός από την χρήση παρενθέσεων για την κλήση του καστασκευαστή της κλάσης όταν αυτός έχει ορίσματα υπάρχουν οι παρακάτω επιπλέον τρόποι κλήσης κατασκευαστών:
 +
 +=== 1. Κατασκευαστές με μόνο μία παράμετρο ===
 +
 +Στην περίπτωση που έχουμε μόνο μία παράμετρο μπορούμε να καλέσουμε τον κατασκευαστή της κλάσης με χρήση του τελεστή ίσον ('=') ως εξής:
 +<code>class_name object_name = initialization_value;</code>
 +Για παράδειγμα, για την κλάση //Rectangle// στη συνάρτηση //main// μπορείτε να γράψετε 
 +<code c++>
 +int main () {
 +  Rectangle rect=5;
 +  cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
 +  return 0;
 +}
 +</code>
 +
 +Σε αυτή την περίτπωση καλείται ο κατασκευαστής που έχει ένα μόνο όρισμα το οποίο λαμβάνει την τιμή 5. Το εμβαδό του παραλληλογράμμου που εκτυπώνεται είναι 25 (5x5).
 +
 +=== 2. Χρήση αγκύλων αντί για παρενθέσεις ===
 +
 +Η C++ δίνει την δυνατότητα χρήσης αγκύλων αντί για παρενθέσεις προκειμένου να καλέσουμε τον κατασκευαστή της κλάσης. Ο τρόπος αυτός έχει τις εξής δύο παραλαγές:
 +
 +== Σε αναλογία με τη χρήση παρενθέσεων ==
 +
 +<code c++>
 +int main () {
 +  Rectangle rect {5,6}; // calls Rectangle(int w, int h)
 +  cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
 +  return 0;
 +}
 +</code>
 +
 +Καλείται ο κατασκευαστής της κλάσης με δύο ορίσματα (//width=5, height=6//).
 +
 +== Με χρήση του τελεστή = πριν τις αγκύλες ==
 +
 +<code c++>
 +int main () {
 +  Rectangle rect = {5,6}; // calls Rectangle(int w, int h)
 +  Rectangle rects[2] = {{4,5}, {5,6}}; // calls Rectangle(int w, int h) for each table element
 +  cout << "[rect    ] area: " << rect.getWidth() * rect.getHeight() << endl;
 +  cout << "[rects[0]] area: " << rects[0].getWidth() * rects[0].getHeight() << endl;
 +  cout << "[rects[1]] area: " << rects[1].getWidth() * rects[1].getHeight() << endl;
 +  return 0;
 +}
 +</code>
 +
 +Οι παραπάνω δύο τρόποι είναι ισοδύναμοι εάν πρόκειται να αρχικοποιήσουμε ένα μεμονομένο αντικείμενο. Στην περίπτωση που θέλουμε να αρχικοποιήσουμε πίνακες από αντικείμενα, μόνο η χρήση του τελεστή ίσον ('=') πριν από τις αγκύλες επιτρέπει την παραπάνω αρχικοποίηση σε μία εντολή.
 +
  
 ===== Δημιουργία και ανάθεση αντικειμένων σε δείκτες ===== ===== Δημιουργία και ανάθεση αντικειμένων σε δείκτες =====
cpp/object_creation.txt · Last modified: 2021/05/07 06:22 (external edit)