Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

edit: Βρηκα την λυση στο ερωτημα οσον αφορα τον κωδικα μου.

 

Οποτε η μονη ερωτηση που μου μενει ειναι αν καποιος μπορει να μου εξηγησει καπως πως λειτουργουν οι overloaded operators <<,>> για C++.

 

Ειναι οι μονοι που με εχουν μπερδεψει καπως.

Επεξ/σία από pavlos1908
Δημοσ.

Θυμόμουν πως ο παπι είχε γράψει κάτι επί του θέματος και είδα πως το είχε γράψει σε σένα.

Για κοίτα το μήπως και σου είχε ξεφύγει, διαφορετικά ρίξε μία ματιά εδώ. Δεν είμαι και τόσο

γνώστης για να σου το εξηγήσω ο ίδιος, οπότε αναμένουμε.

  • Moderators
Δημοσ.

 

Ξεκίνησα να γράφω λίγο κώδικα για να φέρω ως παράδειγμα και ευτυχώς που είδα το 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;

 

να καλέσει τη συνάρτηση που εσύ υλοποίησες.

Δημοσ.

στην ουσία καλείς το std::cout::operator<<(a).

Στην ουσία με όλη τη σημασία της λέξης. Ο operator << (και οποιοσδήποτε άλλος operator) δεν είναι διαφορετικοί από οποιαδήποτε άλλη συνάρτηση της κλάσης. Τα δύο παρακάτω είναι τελείως ισοδύναμα:

std::cout << a;
std::cout.operator<<(a);

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...