Φωτογραφία Αναστασία Γωγή
Quiz 4
από Αναστασία Γωγή - Monday, 5 December 2011, 2:54 PM
 
Καλησπέρα σε όλους,

Στο κουίζ της προηγούμενης ενότητας δεν μπορώ να αιτολογήσω με σιγουριά γιατί είναι σωστά τα κάτωθι:

1. Ένας constructor έχει πρόσβαση στα μη-στατικά μέλη μιας κλάσης

2. void fall(int time) {}
int fall(int distance) { return distance; }
Το παραπάνω ζεύγος μεθόδων θα παράξει σφάλμα κατά τη μεταγλώττιση

Μήπως μπορεί κάποιος να με βοηθήσει?

Ευχαριστώ εκ των προτέρων
 
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Quiz 4
από Νικόλαος Πανάγος - Monday, 5 December 2011, 5:06 PM
 
Καλησπέρα Αναστασία,

Το πρώτο ισχύει γιατί ένας constructor όντως έχει πρόσβαση και στα στατικά αλλά και στα μη-στατικά (instance variables), τα οποία δεύτερα μας ενδιαφέρουν και περισσότερο.

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

ΝΠ

Φωτογραφία Αναστασία Γωγή
Απάντηση: Quiz 4
από Αναστασία Γωγή - Monday, 5 December 2011, 4:08 PM
 
Καλησπέρα Νικόλα,

Σε ευχαριστώ πολύ για την άμεση απάντησή σου.

Ειδικά για την δεύτερη ερώτηση δεν είχα πονηρευτεί οτί είχαν την ίδια υπογραφή ενώ είχαν μόνο διαφορετικό όνομα ίδιου τύπου μεταβλητής.

Τώρα μου είναι απολύτως ξεκάθαρο.

Καλή συνέχεια
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Quiz 4
από Νικόλαος Πανάγος - Monday, 5 December 2011, 5:06 PM
 
Τίποτα Αναστασία, να είσαι καλά! Καλή συνέχεια και σε σένα.
Φωτογραφία Ιωάννα Γιαμαλάκη
Απάντηση: Quiz 4
από Ιωάννα Γιαμαλάκη - Tuesday, 6 December 2011, 11:17 AM
 

Καλησπέρα κι από μένα!

Σχετικα με το πρώτο μπερδεύτηκα λιγάκι.. Εννοούμε πως ένας constructor έχει πρόσβαση στα μη στατικά μέλη της κλάσης στην οποία ανήκει ή άλλων κλάσεων;

Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Quiz 4
από Νικόλαος Πανάγος - Tuesday, 6 December 2011, 3:56 PM
 
Ιωάννα να με συγχωρέσεις αλλά την ερώτηση αυτή που έκανες δεν θα σου την απαντήσω γιατί είμαι σίγουρος πως αν το σκεφτείς καλύτερα θα δώσεις η ίδια την απάντηση στον εαυτό σου.
Έχω την εντύπωση πως και τις 2 σας μπέρδεψε η φράση "μη στατικα μέλη". Αγνοήστε το, τέτοια πράγματα υπάρχουν και στις ερωτήσεις του διαγωνίσματος με σκοπό να σας αποπροσανατολίσουν τη σκέψη.

Φωτογραφία Ιωάννα Γιαμαλάκη
Απάντηση: Quiz 4
από Ιωάννα Γιαμαλάκη - Wednesday, 7 December 2011, 2:44 PM
 

Το ότι ένας constructor έχει προσβαση στα στατικά ή μη στατικά μέλη της κλάσης που ανήκει, το θεωρώ αυτονόητο, αφού έτσι κι αλλιώς οποιαδήποτε μέθοδος έχει πρόσβαση σε όλα τα μέλη της κλάσης που ανήκει ακόμα κι αν αυτά ειναι private. Το να έχει πρόσβαση σε μη στατικά μέλη μιας άλλης κλάσης από την άλλη, έχει να κάνει με τους προσδιοριστές ορατότητας των μελών αυτών και κάτι τέτοιο ισχύει επίσης για οποιαδήποτε μέθοδο (εκτός αν είναι static). (σωστά;;;)

Βάση αυτών, στο αν ισχύει η πρόταση "Ένας constructor μπορεί να έχει προσβαση στα μη στατικά μέλη μιας κλάσης" θα απαντούσα:

για την πρώτη περίπτωση: "φυσικά, όπως κάθε μέθοδος"

για τη δεύτερη περίπτωση: "εξαρτάται από τον προσδιοριστή ορατότητας του μέλους (όπως για κάθε μέθοδο)"

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

Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Quiz 4
από Νικόλαος Πανάγος - Wednesday, 7 December 2011, 3:40 PM
 
Έδωσες μόνη σου απάντηση στον εαυτό σου όπως σου είπα και ήμουν σίγουρος. ;-)

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