jtsc21 Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 Παιδια δωστε λιγο τα φωτα σας γιατι εχω κολλησει Κωδικας1 > #include <iostream> using namespace std; ////////////////////////////////////// class A{int data; public: A(int a):data(a){cout << "Con an A" << endl;} ~A(){cout <<"Destr an A" << endl;} int print(){return data;} int fun(){return data++;}}; ////////////////////////////////////// int main(void) {A o(10); cout << o.print() << endl; cout << o.fun() << endl; cout << o.print() << endl;} Κωδικας2 > #include <iostream> using namespace std; ///////////////////////////// int fun(int a){return a++;} ///////////////////////////// int main(void) {int o=10; cout << o << endl; cout << fun(o) << endl; cout << o << endl;} Στον 1ο κωδικα, στη συναρτηση fun επιστρεφεται η τρεχουσα τιμη του data και μετα αυξανεται κατα 1. Στο 2ο κωδικα, στη συναρτηση fun επιστρεφεται η τρεχουσα τιμη του a αλλα αγνοηται ο τελεστης ++ στο return(πραγμα που δε συμβαινει στη 1η περιπτωση.) Φαινεται πολυ απλο αλλα εχω σκαλωσει thnx in advance:-)
teo64x Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 Στη 2η περίπτωση το a είναι τοπική μεταβλητή μέσα στη fun().
Billman Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 > // pass by reference int fun(int &a){return a++;} Σε περίπτωση που θέλεις να διατηρούνται οι αλλαγές που κάνεις σε κάποια παράμετρο συνάρτησης/μεθόδου.
jtsc21 Δημοσ. 5 Αυγούστου 2009 Μέλος Δημοσ. 5 Αυγούστου 2009 αυτο που θελω να ρωτησω και ισως δεν τοπα σωστα ειναι το εξης το return a++ δε σημαινει 1.return a 2.a++ ?? απο τη στιγμη που εμεσα επιστρεφω πρωτα τιμη, μετα το a γιατι να αυξηθει(αφου μετα το return τα αλλα πρεπει να αγνοηθουν)? πχ αν γραψω return a++ cout << "lol" << endl; δε θα εκτυπωσει τιποτα
teo64x Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 Προφανώς, έτσι όπως είναι υλοποιημένο το 2ο παράδειγμα, δεν εξυπηρετεί σε τίποτα το ++.
jtsc21 Δημοσ. 5 Αυγούστου 2009 Μέλος Δημοσ. 5 Αυγούστου 2009 Προφανώς, έτσι όπως είναι υλοποιημένο το 2ο παράδειγμα, δεν εξυπηρετεί σε τίποτα το ++. ακριβως αλλα στο 1ο παραδειγμα?? γιατι αυξανεται?
teo64x Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 Υποθέτω ότι η έκφραση a++ κάνει, σε γενικές γραμμές, το εξής: αυξάνει το a κατά 1, επιστρέφει a-1. Άρα, η αύξηση έχει ήδη εκτελεστεί πριν η τιμή της παράστασης δοθεί στο return. (Παρόλο που αυτή η τιμή τυχαίνει να είναι η "παλιά" τιμή του a.)
bxenos Δημοσ. 5 Αυγούστου 2009 Δημοσ. 5 Αυγούστου 2009 To return θέλει ένα όρισμα, έβαλες a++, αρα εκτελείτε το a++ και μετα το return. {Αρχή Υπολογισμου του ορίσματος a++ η τιμή του είναι a (αρχική τιμη), το a αυξάνεται κατά 1. Τέλος υπολογισμού ορίσματος}
Moderators Praetorian Δημοσ. 6 Αυγούστου 2009 Moderators Δημοσ. 6 Αυγούστου 2009 ακριβωςαλλα στο 1ο παραδειγμα?? γιατι αυξανεται? Γιατί τελικά κάνει αυτό που θα περίμενε κάποιος να κάνει χρησιμοποιώντας post-increment τελεστή σε όρισμα συνάρτησης. Αν "έσπαζε" τη λειτουργία του post-increment τελεστή και επέστρεφε μόνο την τιμή του a πριν την αύξηση, επιστρέφοντας στην καλούσα συνάρτηση (χωρίς έπειτα να κάνει την αύξηση), τότε θα ήταν ασυνεπές προς αυτό που θα περίμενε ο προγραμματιστής ή αυτός που θα διαβάσει τον κώδικα. Ωραία, το return δεν είναι μια όποια κι όποια συνάρτηση, αλλά ήδη το post-increment είναι "δυσανάγνωστο" λόγω των υπονοούμενων (παρ)ενεργειών του. Αν άρχιζαν και οι εξαιρέσεις τα πράγματα θα γινότα χειρότερα. Αν και πάλι, έχω την εντύπωση ότι υπάρχει ή υπήρχε ένα θέμα σχετικά με το πως διαφορετικοί compiler μπορεί να "ερμηνεύουν" περίεργες/αμφιλεγόμενες περιπτώσεις διαφορετικά. Οπότε καλύτερα να γράφουμε ξεκάθαρο κώδικα, όπου θα είναι πάντα σαφές τι γίνεται σε όλους.
jtsc21 Δημοσ. 6 Αυγούστου 2009 Μέλος Δημοσ. 6 Αυγούστου 2009 καταρχας ευχαριστω ολους οσους απαντησαν To return θέλει ένα όρισμα, έβαλες a++, αρα εκτελείτε το a++ και μετα το return.{Αρχή Υπολογισμου του ορίσματος a++ η τιμή του είναι a (αρχική τιμη), το a αυξάνεται κατά 1. Τέλος υπολογισμού ορίσματος} ναι αλλα δεν επιστρεφει το a+1 αλλα το a a+1 θα επεστρεφε αν εγραφα return ++a; σωστα? Γιατί τελικά κάνει αυτό που θα περίμενε κάποιος να κάνει χρησιμοποιώντας post-increment τελεστή σε όρισμα συνάρτησης. Αν "έσπαζε" τη λειτουργία του post-increment τελεστή και επέστρεφε μόνο την τιμή του a πριν την αύξηση, επιστρέφοντας στην καλούσα συνάρτηση (χωρίς έπειτα να κάνει την αύξηση), τότε θα ήταν ασυνεπές προς αυτό που θα περίμενε ο προγραμματιστής ή αυτός που θα διαβάσει τον κώδικα. Ωραία, το return δεν είναι μια όποια κι όποια συνάρτηση, αλλά ήδη το post-increment είναι "δυσανάγνωστο" λόγω των υπονοούμενων (παρ)ενεργειών του. Αν άρχιζαν και οι εξαιρέσεις τα πράγματα θα γινότα χειρότερα. Αν και πάλι, έχω την εντύπωση ότι υπάρχει ή υπήρχε ένα θέμα σχετικά με το πως διαφορετικοί compiler μπορεί να "ερμηνεύουν" περίεργες/αμφιλεγόμενες περιπτώσεις διαφορετικά. Οπότε καλύτερα να γράφουμε ξεκάθαρο κώδικα, όπου θα είναι πάντα σαφές τι γίνεται σε όλους. συμφωνω απολυτα
ippo00 Δημοσ. 6 Αυγούστου 2009 Δημοσ. 6 Αυγούστου 2009 Sorry for being anal αλλά το return δεν είναι συνάρτηση...
Moderators Praetorian Δημοσ. 6 Αυγούστου 2009 Moderators Δημοσ. 6 Αυγούστου 2009 Sorry for being anal αλλά το return δεν είναι συνάρτηση... Ναι. I wasn't... being anal.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.