pavlos1908 Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 (επεξεργασμένο) edit: Βρηκα την λυση στο ερωτημα οσον αφορα τον κωδικα μου. Οποτε η μονη ερωτηση που μου μενει ειναι αν καποιος μπορει να μου εξηγησει καπως πως λειτουργουν οι overloaded operators <<,>> για C++. Ειναι οι μονοι που με εχουν μπερδεψει καπως. Επεξ/σία 29 Μαρτίου 2015 από pavlos1908
gon1332 Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 Θυμόμουν πως ο παπι είχε γράψει κάτι επί του θέματος και είδα πως το είχε γράψει σε σένα. Για κοίτα το μήπως και σου είχε ξεφύγει, διαφορετικά ρίξε μία ματιά εδώ. Δεν είμαι και τόσο γνώστης για να σου το εξηγήσω ο ίδιος, οπότε αναμένουμε.
Moderators Kercyn Δημοσ. 29 Μαρτίου 2015 Moderators Δημοσ. 29 Μαρτίου 2015 Ξεκίνησα να γράφω λίγο κώδικα για να φέρω ως παράδειγμα και ευτυχώς που είδα το link του gon1332 γιατί έγραφα τα ίδια πράγματα... Οι operators στη C++ είναι συναρτήσεις τις οποίες καλείς με κάποιες παραμέτρους. Αυτοί οι 2 που έχεις γράψει δεν έχουν καμία διαφορά από τους υπόλοιπους. Επειδή, πριν σβήσεις τον κώδικα, είδα κάτι για ostream κλπ θα γράψω μόνο γι' αυτό. Το ostream είναι (χοντρικά) μία κλάση που σου επιτρέπει να παίρνεις πράγματα από τη μνήμη και να τα δείχνεις στην οθόνη. Αν δεις εδώ, υπερφορτώνει τον operator<< για πολλά πράγματα. Όταν εσύ γράφεις κάτι τέτοιο int a = 5; std::cout << a; στην ουσία καλείς το std::cout::operator<<(a). Το overload για int προβλέπεται από το standard και έχει ήδη υλοποιηθεί στον compiler σου. Επειδή όμως η C++ δε μπορεί να προβλέψει για κάθε κλάση που μπορεί να φτιάξει κάποιος, δίνει τη δυνατότητα σε μένα και σε σένα και σε όποιον άλλον θέλει να κάνει overload όποιους operators θέλει (που δεν υπάρχουν ήδη). Στην περίπτωσή σου, θες να εκτυπώσεις ένα vector στην οθόνη. Ο compiler δεν ξέρει πώς να το κάνει αυτό. Για να μάθει, χρησιμοποιείς μία από τις κλάσεις που σου επιτρέπουν να εκτυπώνεις πράγματα, την cout. Ούτε όμως η cout ξέρει πώς να κάνει αυτό που θες. Εδώ είναι που έρχεσαι εσύ με μια δική σου υλοποίηση για το std::cout::operator<<(std::vector<double>). Μέσα στην υλοποίησή σου λες στον compiler ότι αν δει κάτι τέτοιο std::vector<double> a = { 5.4, 3.2, 6.9 }; std::cout << a; να καλέσει τη συνάρτηση που εσύ υλοποίησες.
defacer Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 στην ουσία καλείς το std::cout::operator<<(a). Στην ουσία με όλη τη σημασία της λέξης. Ο operator << (και οποιοσδήποτε άλλος operator) δεν είναι διαφορετικοί από οποιαδήποτε άλλη συνάρτηση της κλάσης. Τα δύο παρακάτω είναι τελείως ισοδύναμα: std::cout << a; std::cout.operator<<(a);
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα