Φωτογραφία Ειρήνη ΧΑΤΖΗΠΑΝΑΓΙΩΤΟΥ
Απορίες στις σημειώσεις 4ης Ενότητας.
από Ειρήνη ΧΑΤΖΗΠΑΝΑΓΙΩΤΟΥ - Sunday, 12 December 2010, 5:02 AM
 

Καλημέρα σε όλους.

Αν και βρισκόμαστε στην ύλη στην 5η ενότητα, οι παρακάτω απορίες έχουν να κάνουν με τις σημειώσεις της 4ης ενότητας.

Στην σελίδα 114  στην κλάσης Point που υπάρχει εκεί, αν και είναι πολύ απλή, δεν καταλαβαίνω την χρησιμότητα του 3ου constractor. Γιατί δημιουργεί ένα 2ο αντικείμενο από την ίδια την κλάση; Χρησιμοποιείται κάπου αργότερα αυτό και απλά δεν το καταλαβαίνω.

Στην ανάλυση της κλάσης Circle στην σελίδα 119, ο ορισμός της μεταβλητής Center ( που είναι και αυτή τύπου Point ) υπάρχει σε 2 σημεία. Γιατί; Σύμφωνα με τις σημειώσεις στο 2ο αποθηκεύει το κέντρο του κύκλου. Εξακολουθώ όμως να μην καταλαβαίνω την λειτουργικότητα.

Ευχαριστώ για τον χρόνο σας.

 

 
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Απορίες στις σημειώσεις 4ης Ενότητας.
από Νικόλαος Πανάγος - Sunday, 12 December 2010, 7:28 AM
 
Καλημέρα Ειρήνη,

ο τρίτος constructor είναι αυτός που οι προγραμματιστές C++ ονομάζουν copy constructor και που μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός νέου αντικειμένου (αντίγραφο) που θα είναι ίδιο ακριβώς με ένα υπάρχον το οποίο λαμβάνει ως παράμετρο (πρωτότυπο). Το γραφεί και στα σχόλια αλλά δεν το εξηγεί τόσο αναλυτικά.

Για να είμαι ειλικρινής τη δεύτερη ερώτησή σου δεν την πολυκαταλαβαίνω. Η μεταβλητή μέλος center είναι δηλωμένη ως private και χρησιμοποιείται από διάφορες μεθόδους είτε για την ανάγνωση είτε για την εκχώρηση της τιμής της. Αν θες εξήγησέ μου λίγο καλύτερα τι δεν καταλαβαίνεις και να μπορέσω κι εγώ να σου εξηγήσω τι γίνεται.

Με την ευκαιρία, μου φάνηκε λίγο περίεργο που μόνο η Ειρήνη εξέφρασε απορίες σχετικά με τον αντικειμενοστρεφή προγραμματισμό. Μακάρι να διαψευστώ αλλά πολλοί από εσάς θα δουν στη συνέχεια πως κάποια πράγματα δεν τα έχουν καταλάβει και τόσο καλά ή πως δεν λειτουργούν όπως αρχικά νόμιζαν.

ΝΠ
Φωτογραφία Ειρήνη ΧΑΤΖΗΠΑΝΑΓΙΩΤΟΥ
Απάντηση: Απορίες στις σημειώσεις 4ης Ενότητας.
από Ειρήνη ΧΑΤΖΗΠΑΝΑΓΙΩΤΟΥ - Sunday, 12 December 2010, 9:09 PM
 

Καλησπέρα και πάλι.

Για να δω ότι κατάλαβα...

Αν θέλω να δημιουργήσω ένα νέο αντικείμενο το οποίο είναι ακριβές αντίγραφο με ένα υπάρχον, θα χρησιμοποιώ τον 3ο constractor. Ωραία... Και που χρησιμεύει ακριβώς αυτό είπαμε; Έχω προχωρήσει λίγο και στην 5η ενότητα και είμαι πολύ χαμένη.

Αναφερόμενη στην μεταβλητή center (σελ. 119)... Βλέπω ότι η center είναι μία private μεταβλητή. Με τον default constractor έχουμε την δημιουργία ενός αντικειμένου Circle με παράμετρο την Center η οποία είναι τύπου Point. Με τον 2ο constractor έχουμε και πάλι την δημιουργία ενός αντικειμένου, αλλά με παραμέτρους τις Center (στην οποία καταχωρείται ένα Point με τιμή c) και την radious (στην οποία καταχωρείται η r που είναι τύπου integer. Σωστά;;;

Ευχαριστώ για τον χρόνο σας.

Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Απορίες στις σημειώσεις 4ης Ενότητας.
από Νικόλαος Πανάγος - Sunday, 12 December 2010, 9:29 PM
 
Ειρήνη τον copy constructor τον χρησιμοποιούμε στις περιπτώσεις που μπορεί να θέλουμε να δημιουργήσουμε ένα αντίγραφο ενός υπάρχοντος αντικειμένου.

Τώρα ας δούμε τι κάνουν οι constructors για να το καταλάβεις καλύτερα. Στην κλάση υπάρχει ως μεταβλητή μέλος μια αναφορά τύπου Point με όνομα center. Όταν λοιπόν καλείται ο default constructor, αυτό που κάνει η γραμμή center = new Point(); είναι να δημιουργήσει ένα νέο αντικείμενο τύπου Point και να θέσει την αναφορά αυτήν να 'δείχνει' στο αντικείμενο αυτό.

Ο δεύτερος constructor λαμβάνει δύο παραμέτρους, ένα αντικείμενο τύπου Point και έναν ακέραιο, προφανώς η πρώτη θα αντιστοιχεί στο κέντρο του κύκλου που θα δημιουργηθεί και η δεύτερη στην ακτίνα του.

Εδώ λοιπόν βλέπεις πως καλείται ο copy constructor της Point στην πρώτη γραμμή για να δημιουργήσει ένα νέο αντικείμενο τύπου Point που θα είναι αντίγραφο αυτού της παραμέτρου και στη συνέχεια θέτει την αναφορά center να 'δείχνει' στο αντικείμενο αυτό. Η δεύτερη γραμμή εκχωρεί την τιμή της παραμέτρου r στη μεταβλητή μέλος radius. Άρα λοιπόν, μόλις ολοκληρωθεί η κλήση του συγκεκριμένου constructor θα έχει δημιουργηθεί ένα αντικείμενο τύπου Circle με κέντρο που έχει τις συντεταγμένες του σημειου c και ακτίνα ίση με r.