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

απλη C++ ερωτηση


jtsc21

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

Δημοσ.

Παιδια δωστε λιγο τα φωτα σας γιατι εχω κολλησει:-(

 

Κωδικας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η περιπτωση.)

 

Φαινεται πολυ απλο αλλα εχω σκαλωσει:rolleyes::fear:

thnx in advance:-)

Δημοσ.

>
// pass by reference
int fun(int &a){return a++;}

Σε περίπτωση που θέλεις να διατηρούνται οι αλλαγές που κάνεις σε κάποια παράμετρο συνάρτησης/μεθόδου.

Δημοσ.

αυτο που θελω να ρωτησω και ισως δεν τοπα σωστα ειναι το εξης

το return a++ δε σημαινει

1.return a

2.a++

??

απο τη στιγμη που εμεσα επιστρεφω πρωτα τιμη, μετα το a γιατι να αυξηθει(αφου μετα το return τα αλλα πρεπει να αγνοηθουν)?

 

πχ αν γραψω

return a++

cout << "lol" << endl;

δε θα εκτυπωσει τιποτα

Δημοσ.
Προφανώς, έτσι όπως είναι υλοποιημένο το 2ο παράδειγμα, δεν εξυπηρετεί σε τίποτα το ++.

 

ακριβως

αλλα στο 1ο παραδειγμα??

γιατι αυξανεται?

Δημοσ.

Υποθέτω ότι η έκφραση a++ κάνει, σε γενικές γραμμές, το εξής: αυξάνει το a κατά 1, επιστρέφει a-1. Άρα, η αύξηση έχει ήδη εκτελεστεί πριν η τιμή της παράστασης δοθεί στο return. (Παρόλο που αυτή η τιμή τυχαίνει να είναι η "παλιά" τιμή του a.)

Δημοσ.

To return θέλει ένα όρισμα, έβαλες a++, αρα εκτελείτε το a++ και μετα το return.

{Αρχή Υπολογισμου του ορίσματος a++

η τιμή του είναι a (αρχική τιμη),

το a αυξάνεται κατά 1.

Τέλος υπολογισμού ορίσματος}

  • Moderators
Δημοσ.
ακριβως

αλλα στο 1ο παραδειγμα??

γιατι αυξανεται?

 

Γιατί τελικά κάνει αυτό που θα περίμενε κάποιος να κάνει χρησιμοποιώντας post-increment τελεστή σε όρισμα συνάρτησης.

 

Αν "έσπαζε" τη λειτουργία του post-increment τελεστή και επέστρεφε μόνο την τιμή του a πριν την αύξηση, επιστρέφοντας στην καλούσα συνάρτηση (χωρίς έπειτα να κάνει την αύξηση), τότε θα ήταν ασυνεπές προς αυτό που θα περίμενε ο προγραμματιστής ή αυτός που θα διαβάσει τον κώδικα.

 

Ωραία, το return δεν είναι μια όποια κι όποια συνάρτηση, αλλά ήδη το post-increment είναι "δυσανάγνωστο" λόγω των υπονοούμενων (παρ)ενεργειών του. Αν άρχιζαν και οι εξαιρέσεις τα πράγματα θα γινότα χειρότερα.

 

Αν και πάλι, έχω την εντύπωση ότι υπάρχει ή υπήρχε ένα θέμα σχετικά με το πως διαφορετικοί compiler μπορεί να "ερμηνεύουν" περίεργες/αμφιλεγόμενες περιπτώσεις διαφορετικά. Οπότε καλύτερα να γράφουμε ξεκάθαρο κώδικα, όπου θα είναι πάντα σαφές τι γίνεται σε όλους.

Δημοσ.

καταρχας ευχαριστω ολους οσους απαντησαν:-)

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 μπορεί να "ερμηνεύουν" περίεργες/αμφιλεγόμενες περιπτώσεις διαφορετικά. Οπότε καλύτερα να γράφουμε ξεκάθαρο κώδικα, όπου θα είναι πάντα σαφές τι γίνεται σε όλους.

συμφωνω απολυτα

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...