thanantypas Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Μπορει καποιος να μου πει καποιος τι σημαινει: Counter Counter::operator+(const Counter & rhs) { return Counter(itsVal+rhs.GetitsVal()); } //διαβαζω για την υπερ . τελεστων και δεν μπορω να καταλαβω τι σημαινει το rhs?? //ξερει κανενας γιατι το βαζει? το ξερω οτι η ερωτηση ειναι λιγο :-( για εσας αλλα δεν μπορω να καταλαβω..
bnvdarklord Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 to rhs ειναι το αντικείμενο που θα προστεθει η τιμή του με το τρέχον αντικείμενο που καλει την συναρτηση... δηλαδη αν πεις για τρία αντικείμενα τύπου Counter Α και B και C οτι C = Α + Β τότε ειναι σαν να λες C = Α.+(Β)
thanantypas Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 οκ...με την ιδια λογικη κανω και αφαιρεση;; Counter Counter:perator-(const Counter & rhs) { return Counter(itsVal-rhs.GetitsVal()); }
bnvdarklord Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Ακριβως... Λογικα για να δουλεψει και το = θελει και αυτο υπερφορτωση αν δεν κανω λαθος...
kagelos Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 rhs = Right Hand Side ονομάζεται συνήθως έτσι η παράμετρος ώστε να θυμίζει ότι πρόκειται για το αντικείμενο δεξιά από τον τελεστή (αριστερά είναι το this).
3c0r1z Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Να προσθέσω ότι στους binary operators +, -, *, /, % καλώ είναι να υπάρχει το const μπροστά απο τον τύπο επιστροφής όπως παρακάτω: >const Counter Counter::operator+(const Counter& rhs) { return Counter(itsVal+rhs.GetitsVal()); } Αυτό είναι χρήσιμο για την αποφυγή περίεργων καταστάσεων όπως: >Counter a, b, c; a + b = c;
V.I.Smirnov Δημοσ. 7 Ιουνίου 2010 Δημοσ. 7 Ιουνίου 2010 Ακριβως... Λογικα για να δουλεψει και το = θελει και αυτο υπερφορτωση αν δεν κανω λαθος... Λάθος κάνεις, ΔΕΝ απαιτείται υπερφόρτωση. Το > Counter Counter:οperator+(const Counter & rhs) { return Counter(itsVal+rhs.GetitsVal()); } σημαίνει ότι o compiler δημιουργεί με τον constructor του Counter ένα νέο, προσωρινό αντικείμενο Counter, το Counter(itsVal+rhs.GetitsVal()), και επιστρέφει ένα αντίγραφό του. Αν γράψεις C= A+ B , δηλ. a2 = a1, χρησιμοποιείται το = κατά τον προεπιλεγμένο τρόπο ο οποίος είναι να αντιγράφονται τα δεδομένα του a1 μέλος προς μέλος στο α2. Ωστόσο αυτή η προεπιλεγμένη λειτουργία δεν είναι πάντα επιθυμητή (πχ. στην περίπτωση δεικτών γίνεται shallow copy) και τότε η υπερφόρτωση του = είναι απαραίτητη για να δώσει σωστό αποτέλεσμα. Εξάλλου, έχε υπόψη σου ότι το = είναι ο μοναδικός τελεστής που δεν κληρονομείται. Επιπλέον, για να δουλέψει η υπερφόρτωση του + στην C=Α+Β πρέπει το αριστερό όρισμα του + , δηλ το Α, να είναι τύπου Counter. Θα μπορούσες πχ. να γράψεις C= B + 10 αν υπάρχει κατάλληλος constructor ώστε να μετατραπεί το 10 σε αντικείμενο τύπου Counter. Aλλά η ισότητα C = 10 + B είναι απαράδεκτη (εκτός αν το + δηλωθεί friend στην κλάση).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.