THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: inspired on January 30, 2011, 20:37:08 pm



Title: [C++] τι τυπωνει
Post by: inspired on January 30, 2011, 20:37:08 pm
τη συγκεκριμενη ασκηση την εδειξαν στο τελευταιο μαθημα

Code:
#include <iostream>
using namespace std;

class A{
  protected:
    static int k;
  public:
    static int fun(int n){k=n+2;return k;}
    operator int(){return A::fun(3);}
};

int A::k;
class B:public A{
    int n;
  public:
    int bfun(){return n+A::fun(n);}
    B(int m){n=m+k;}
    void out(){cout<<n<<"\n"<<k<<"\n";}
};

int main()
{B b(4);
 A a;
 cout<<A::fun(2)<<"\n";
 cout<<b.bfun()<<"\n";
 cout<<a+b<<"\n";
 b.out();

 return 1;
}

το cout<<a+b τυπωνει 10
μπορει καποιος να εξηγησει γιατι αλλα και πως δουλευει ακριβως αφου δν εχουμε επικαλυψη του + ?

και η επικαλυψη του int() τι κανει επισης?
ευχαριστω


Title: Re: τι τυπωνει
Post by: arashi on January 30, 2011, 20:41:03 pm
Βαλτε ενα [Προγραμματιστικες Τεχνικες] στον τιτλο ρε παιδια.......


Title: Re: τι τυπωνει
Post by: varvoutis on January 30, 2011, 21:04:14 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()


Title: Re: [C++] τι τυπωνει
Post by: varvoutis on January 30, 2011, 21:09:57 pm
Εκανες τον κοπο να το τρεξεις σε κανεναν compiler?

πω πρεπει να κοψω το πολυ το διαβασμα, με κανει να βγαζω τον κακο μου εαυτο


Title: Re: τι τυπωνει
Post by: nikitas350 on January 30, 2011, 21:51:02 pm
Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

Όταν λες δεν υπάρχει τι έννοεις?


Title: Re: τι τυπωνει
Post by: sidj0n on January 30, 2011, 22:19:37 pm
Quote
Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

υπαρχει και μετατρέπει τη μεταβλητή τύπου χ που δέχετα στις αγκύλες σε τυπου int.στη συγκεκριμένη περίπτωση επειδή τον δημιουργεί ο χρήστης τον τύπο πρέπει να γiνεi overload


Title: Re: [C++] τι τυπωνει
Post by: aaa on January 30, 2011, 22:20:12 pm
cout<<a+b  

γιατί τυπώνει 10? μπορεί κάποιος να το εξηγείσει?
και τη σημαίνει αυτή η εντολή? να προσθέσουμε τα δύο αντικείμενα? δηλαδή τι?


Title: Re: τι τυπωνει
Post by: varvoutis on January 30, 2011, 22:38:04 pm
Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

Όταν λες δεν υπάρχει τι έννοεις?

εννοω οτι δε στεκει αυτος ο τροπος γραφης... στεκει; δε θα πρεπε να ειναι αλλιως; τι ειδος επιστρεφει η επικαλυψη του τελεστη ();

δεν ξερω, μαλακιες λεω;


Title: Re: [C++] τι τυπωνει
Post by: sidj0n on January 30, 2011, 22:39:01 pm
cout<<a+b  

γιατί τυπώνει 10? μπορεί κάποιος να το εξηγείσει?
και τη σημαίνει αυτή η εντολή? να προσθέσουμε τα δύο αντικείμενα? δηλαδή τι?



σε αυτή την εντολή το πρώτο πράγμα που κοιτάει ο μεταγλωτιστής είναι αν είναι  γνωστού τύπου ώστε να γίνει η πρόσθεση, μετά αν υπάρχει υπερφόρτωση του + και μετά αν μπορεί να γίνεi κάποια μετατροπή στο τύπο ώστε να είναι δυνατή η πρόσθεση.στη περίπτωση αυτή γίνετai το τελευταίο οπότε καλείτε αυτόματα ο operator int για κάθε αντικείμενο.


Title: Re: τι τυπωνει
Post by: varvoutis on January 30, 2011, 22:47:56 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()


Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

Όταν λες δεν υπάρχει τι έννοεις?

εννοω οτι δε στεκει αυτος ο τροπος γραφης... στεκει; δε θα πρεπε να ειναι αλλιως; τι ειδος επιστρεφει η επικαλυψη του τελεστη ();

δεν ξερω, μαλακιες λεω;


ωραια το μυστηριο λυθηκε, μαλακιες ελεγα τελικα!  ^redface^ ^redface^

Εκανες τον κοπο να το τρεξεις σε κανεναν compiler?

πω πρεπει να κοψω το πολυ το διαβασμα, με κανει να βγαζω τον κακο μου εαυτο


το ετρεξα εγω, βγαζει αυτο το πραμα:

Code:
4
10
10
4
5

τωρα τι και πώς, δεν ξερω. να μαθω αλλη φορα να κανω τον εξυπνο...

το ερωτημα ειναι τωρα τι σημαινει αυτος ο τροπος γραφης

operator int(){return A::fun(3);}

εδιτ: οριστε και τι σημαινει

Quote
Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

υπαρχει και μετατρέπει τη μεταβλητή τύπου χ που δέχετα στις αγκύλες σε τυπου int.στη συγκεκριμένη περίπτωση επειδή τον δημιουργεί ο χρήστης τον τύπο πρέπει να γiνεi overload

πισω στη σπηλια μου  ^tafos^



Title: Re: [C++] τι τυπωνει
Post by: spiounos on January 30, 2011, 22:51:30 pm
cout<<a+b  

γιατί τυπώνει 10? μπορεί κάποιος να το εξηγείσει?
και τη σημαίνει αυτή η εντολή? να προσθέσουμε τα δύο αντικείμενα? δηλαδή τι?

σ'αυτην την περιπτωση προσθετεις δυο αντικειμενα....ομως ο compiler δεν αναγνωριζει αυτην την πραξη...οποτε ψαχνει καπου για επικαλυψη του τελεστή +....δεν την βρισκει ....μετά ψαχνει για συναρτηση/επικαλυψη μετατροπης τυπου....εδω η operator int().....και καλειται για καθε αντικειμενο(εκτελειται το σωμα της δηλαδη)....

πριν το cout << a+b  το k=6 και το n=4.....οποτε καλειται για το a αντικειμενο η operator int και επιστρεφει 5 ,μετα καλειται για το b και επιστρεφει 5 (κατανοητο το 5 απο σωμα της operator),αρα 5+5=10.....

αν και με προλαβαν ,δεν πειραζει....


Title: Re: [C++] τι τυπωνει
Post by: leon-SPT on January 30, 2011, 23:33:20 pm
Παιδιά στο συγκεκριμένο πρόγραμμα μπορεί κάποιος παρακαλώ να εξηγήσει κάθε τιμή πως εκτυπώνεται? Διαβασα τις static αλλά δεν ξέρω πραγματικά πως κάθεται... Αν μπορείτε λίγο να με βάλετε στον τρόπο σκέψης..


Title: Re: [C++] τι τυπωνει
Post by: inspired on January 31, 2011, 00:14:18 am
cout<<a+b  

γιατί τυπώνει 10? μπορεί κάποιος να το εξηγείσει?
και τη σημαίνει αυτή η εντολή? να προσθέσουμε τα δύο αντικείμενα? δηλαδή τι?

σ'αυτην την περιπτωση προσθετεις δυο αντικειμενα....ομως ο compiler δεν αναγνωριζει αυτην την πραξη...οποτε ψαχνει καπου για επικαλυψη του τελεστή +....δεν την βρισκει ....μετά ψαχνει για συναρτηση/επικαλυψη μετατροπης τυπου....εδω η operator int().....και καλειται για καθε αντικειμενο(εκτελειται το σωμα της δηλαδη)....

πριν το cout << a+b  το k=6 και το n=4.....οποτε καλειται για το a αντικειμενο η operator int και επιστρεφει 5 ,μετα καλειται για το b και επιστρεφει 5 (κατανοητο το 5 απο σωμα της operator),αρα 5+5=10.....

αν και με προλαβαν ,δεν πειραζει....


ααα μπραβο, αυτα θυμαμαι ειχε πει κ αυτος στην ασκηση... αλλα ειχα αργησει ν παω κ δν τ ειχα προλαβει  :P



Παιδιά στο συγκεκριμένο πρόγραμμα μπορεί κάποιος παρακαλώ να εξηγήσει κάθε τιμή πως εκτυπώνεται? Διαβασα τις static αλλά δεν ξέρω πραγματικά πως κάθεται... Αν μπορείτε λίγο να με βάλετε στον τρόπο σκέψης..
αρχικα thumbs up για το quake 3 :D (μολις τελειωσει η εξεταστικη ν σκισουμε καμια dm17 με rails :p

οσο για τις static, σκεψου οτι στο συγκεκριμενο παραδειγμα η k π ειναι στατικ θα εχει την ΙΔΙΑ τιμη για ολα τα αντκειμενα π θα δημιουργηθουν στις κλασεις A και B

δλδ οταν εχεις μια κλαση με τον ποιο απλο κωδικα
class paradeigma
{static int k}; (νταξει κ οτι αλλο μετα μεσα)

οσα αντικειμενα της κλασης θα φτιαξεις θα μοιραζονται το ιδιο k( οποια αλλαγη γινει στο k δλδ απο ενα αντικειμενο, αλλαζει ταυτοχρονα το k ολων των αντικειμενων)

ενω αν το k δν ηταν static καθε αντικειμενο θα ειχε το δικο του k και τελος

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


Title: Re: [C++] τι τυπωνει
Post by: leon-SPT on January 31, 2011, 00:23:24 am
Οσο για το Quake τα καλύτερα παιχνίδια γίνονται μέσα στην εκεταστική :P..

Λοιπόν, πχ όταν δημιουργώ το B b(4);
Εδώ λαμβάνω υπόψι τις παρενθέσεις που έχουν γίνει επικάλυψη? Και αν ναι πως?
Εγω το σκέφτομαι πχ ότι b(4).
Αρα πάω στον constructor της B και βάζω m=4... Μετά βλέπω μέσα στο σώμα της και αρχίζω να μπερδεύομαι.
n = m+k;
Βάζω m=4 και έχω n=m + k
Και μετά αυτοσχεδιάζω... ΤΙ ΠΑΙΖΕΙ?


Title: Re: [C++] τι τυπωνει
Post by: sakaflias7 on January 31, 2011, 00:35:46 am
o k  ειναι στατικ κ εχει εξορισμου 0 αρχικα...


Title: Re: [C++] τι τυπωνει
Post by: inspired on January 31, 2011, 00:40:37 am
Οσο για το Quake τα καλύτερα παιχνίδια γίνονται μέσα στην εκεταστική :P..

Λοιπόν, πχ όταν δημιουργώ το B b(4);
Εδώ λαμβάνω υπόψι τις παρενθέσεις που έχουν γίνει επικάλυψη? Και αν ναι πως?
Εγω το σκέφτομαι πχ ότι b(4).
Αρα πάω στον constructor της B και βάζω m=4... Μετά βλέπω μέσα στο σώμα της και αρχίζω να μπερδεύομαι.
n = m+k;
Βάζω m=4 και έχω n=m + k
Και μετά αυτοσχεδιάζω... ΤΙ ΠΑΙΖΕΙ?
αρχικα το k ειναι 0 το οποιο αν κ δν οριστηκε πουθενα νομιζω η c++ το κανει απο μονη της

τωρα οταν δημιουργεις το αντικειμενο b του στελνεις το 4 στον constructor οποτε ναι m=4, και εχεις n=m+k (το k ειναι το ιδιο με αυτο της κλασης A) οποτε n=4

μετα δημιουργεις το αντικειμενο a (το οποιο παιζει ρολο μονο στην a+b εκφραση)

A::fun(2)
η fun της κλασης A δεχεται n (οποτε n=2), k=n+2 αρα k=4, και επιστρεφει το k
οποτε εδω τυπωνει 4

b.bfun()
επιστρεφει το n του b (που ειναι 4 οπως ειπα παραπανω ΣΥΝ Α::fun(n) n=4, η οποια fun της A λεει k=n+2
οποτε το k γινεται 6 και επιστρεφει το k
οποτε εδω τυπωνει 4+6=10

και στο cout a+b εκτελειται και για τις 2 η επικαλυψη operator int() που και για το a και για το b εκτελειται το A::fun(3)
οποτε εδω το k γινεται παλι 5
και τυπωνει 5+5=10

και τελος b.out() η οποια τυπωνει στην οθονη το n του b (4) και το k (π ειναι κοινο για ολα αφου static και μολις εγινε 5  :P )


Title: Re: [C++] τι τυπωνει
Post by: leon-SPT on January 31, 2011, 00:55:03 am
Αυτό θα πει αποκωδικοποίηση  :).. Thx!


Title: Re: [C++] τι τυπωνει
Post by: kostas15 on January 31, 2011, 14:51:42 pm
# include <iostream>

using namespace std;

class A{
      public:
             int k;
             A(){k=9;}
             void out(){k=k+2;cout<<k<<"\n";}
};

class B:public A{
      public:
             int k;
             B(){k=4;A::k+=8;}
             void out(){k+=17;A::k+=3;cout<<k<<"\n";}
};
         
int main(){
A a,*pa;
B b,*pb;
cout<<a.k<<"\n";
cout<<b.A::k<<"\n";
pa=&a;
pa->out();
pb=&b;
pb->out();
pa=&b;
pa->out();
system ("pause");
}   

παιδιά το παραπάνω είναι το τρίτο θέμα του σεπτεμβρίου του 10.
μπορεί κάποιος να μου εξηγήσει βήμα προς βήμα τι γίνεται;;;;
ευχαριστώ..


Title: Re: [C++] τι τυπωνει
Post by: kostas15 on January 31, 2011, 15:26:10 pm
κανείς;;;;;;


Title: Re: [C++] τι τυπωνει
Post by: Laza G on January 31, 2011, 16:08:25 pm
+1


Title: Re: τι τυπωνει
Post by: Groucho on January 31, 2011, 16:46:41 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

DOUBLE TRIPLE FAIL


Title: Re: [C++] τι τυπωνει
Post by: sidj0n on January 31, 2011, 16:51:53 pm
βάλτο σε ένα IDE(πολύ καλό είναι το NetBeans) και μετά debugMode ώστε να βλέπεις βήμα βήμα τι γινεται.


Title: Re: τι τυπωνει
Post by: varvoutis on January 31, 2011, 17:08:27 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

DOUBLE TRIPLE FAIL

αυτολογοκριθηκα εξυπνακια... δε χρειαζομαι μαλακιτσες τυπου FAIL.

αμα θες να γινεις χρησιμος απάντα μου σ αυτο https://www.thmmy.gr/smf/index.php?topic=22725.msg776357#msg776357

γεμισαμε εξυπνους...


Title: Re: τι τυπωνει
Post by: Groucho on January 31, 2011, 17:11:32 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω
DOUBLE TRIPLE FAIL

αυτολογοκριθηκα εξυπνακια... δε χρειαζομαι μαλακιτσες τυπου FAIL.

αμα θες να γινεις χρησιμος απάντα μου σ αυτο https://www.thmmy.gr/smf/index.php?topic=22725.msg776357#msg776357

γεμισαμε εξυπνους...

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω


Title: Re: τι τυπωνει
Post by: varvoutis on January 31, 2011, 17:14:42 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω
DOUBLE TRIPLE FAIL

αυτολογοκριθηκα εξυπνακια... δε χρειαζομαι μαλακιτσες τυπου FAIL.

αμα θες να γινεις χρησιμος απάντα μου σ αυτο https://www.thmmy.gr/smf/index.php?topic=22725.msg776357#msg776357

γεμισαμε εξυπνους...

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω

σορρυ. καθε τελος εξαμηνου τα ιδια... μες στα νευρα ειμαι  :( κωλοεξεταστικη...


Title: Re: τι τυπωνει
Post by: Komimis on January 31, 2011, 19:10:08 pm
Δεν ειναι επικαλυψη του int(). Ειναι σκετο επικαλυψη των (). To int ειναι ο επιστρεφομενος τυπος. Αυτο που θα επιστραφει δηλαδη ειναι τυπου int ( ακεραιος )

Οσον αφορα την επικαλυψη των () εχει εκτενες αφιερωμα στο βιβλιο! ( σελ 366-368 ) ;D

Μπερδευτηκες γιατι ειτε εσυ, ειτε ο διδασκων το γραψε λαθος... ( αμαν αυτα τα λαθη, τοσα ουτε στο σχολειο  >:( )

Δε νομιζω να υπαρχει τετοιο πραμα operator int() Μαλλον αυτο θα ηθελε να γραψει int operator()

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω
DOUBLE TRIPLE FAIL

αυτολογοκριθηκα εξυπνακια... δε χρειαζομαι μαλακιτσες τυπου FAIL.

αμα θες να γινεις χρησιμος απάντα μου σ αυτο https://www.thmmy.gr/smf/index.php?topic=22725.msg776357#msg776357

γεμισαμε εξυπνους...

χαλαρωσε ρε.
πλακα κανουμε.
αν μου εξηγησεις ποιο ειναι το προβλημα σ αυτο που ζητας, ισως μπορω να σε βοηθησω

σορρυ. καθε τελος εξαμηνου τα ιδια... μες στα νευρα ειμαι  :( κωλοεξεταστικη...

μλκ αντώνη σόρυ δεν ήξερα ότι θα γίνεις τόσο brutal !!!!!!!!!!!!!!!  ;)


Title: Re: [C++] τι τυπωνει
Post by: nemdam on January 31, 2011, 20:56:27 pm
παιδιά το παραπάνω είναι το τρίτο θέμα του σεπτεμβρίου του 10.
μπορεί κάποιος να μου εξηγήσει βήμα προς βήμα τι γίνεται;;;;
ευχαριστώ..

1. Ξεκινώντας στην πρώτη γραμμή της main έχουμε το αντικείμενο a τύπου A. Κατά τη δήλωσή του παίρνουμε k=9. Το *pa δε δείχνει πουθενά, οπότε και δεν έχει καμία τιμή.
2. Όμοια στη δήλωση των αντικειμένων b kai *pb τύπου Β, έχουμε για το b ότι k=4 και A::k=17. Προσοχή δεν αλλάζει η μεταβλητή k sτο a. Το *pb δε δείχνει πουθενά, οπότε και δεν έχει καμία τιμή.
3. cout<<a.k<<"\n"; Προφανώς εκτυπώνει το k του αντικειμένου a που είναι 9.
4. cout<<b.A::k<<"\n"; Εκτυπώνει το A::k στο αντικείμενο b και είναι 17.
5. pa=&a; Ορίζουμε την pa να δείχνει στο αντικείμενο a.
6. pa->out(); Εκτελούμε την out() του a αντικειμένου αφού το pa δείχνει στο a και έχουμε k=k+2, άρα κ=11 και το εκτυπώνει.
7. pb=&b; Ορίζουμε την pb να δείχνει στο αντικείμενο b.
8. pb->out(); Εκτελούμε την out() του b αντικειμένου αφού το pb δείχνει στο b και έχουμε k+=17, άρα το k γίνεται 17+4=21, και A::k+=3, άρα Α::k=17+3=20 και εκτυπώνει το 21.
9. pa=&b; Ξαναορίζουμε την pa να δείχνει στο b αυτή τη φορά.
10. pa->out(); Το pa στέλνει στην out του τύπου Α αντικειμένων το Α::k από το αντικείμενο b. Προσοχή! Το Α::k γίνεται k και το k δε μεταφέρεται αφού δεν έχει οριστεί B::k στο Α. Εκτυπώνει, δηλαδή Α::k+2=22.

Αυτά.... Ελπίζω να σε βοήθησα!  ;)


Title: Re: [C++] τι τυπωνει
Post by: Rising Force on January 31, 2011, 21:11:24 pm
γιατί όμως ο *pa, που έχει οριστεί δείχνει στο αντικείμενο Β στην τελευταία εντολή, γυρνάει πίσω στην κλάση Α; Κανονικά δε θα έπρεπε να εκτελεστεί η έκδοση της out που ορίζεται στη Β; :-\


Title: Re: [C++] τι τυπωνει
Post by: nemdam on January 31, 2011, 21:17:10 pm
To *pa έχει οριστεί σαν αντικείμενο του Α στην πρώτη γραμμή. Οπότε όταν εκτελείται, εκτελεί τις εντολές που περιλαμβάνονται στα αντικείμενα του Α!


Title: Re: [C++] τι τυπωνει
Post by: kostas15 on January 31, 2011, 21:27:11 pm
παιδιά το παραπάνω είναι το τρίτο θέμα του σεπτεμβρίου του 10.
μπορεί κάποιος να μου εξηγήσει βήμα προς βήμα τι γίνεται;;;;
ευχαριστώ..

1. Ξεκινώντας στην πρώτη γραμμή της main έχουμε το αντικείμενο a τύπου A. Κατά τη δήλωσή του παίρνουμε k=9. Το *pa δε δείχνει πουθενά, οπότε και δεν έχει καμία τιμή.
2. Όμοια στη δήλωση των αντικειμένων b kai *pb τύπου Β, έχουμε για το b ότι k=4 και A::k=17. Προσοχή δεν αλλάζει η μεταβλητή k sτο a. Το *pb δε δείχνει πουθενά, οπότε και δεν έχει καμία τιμή.
3. cout<<a.k<<"\n"; Προφανώς εκτυπώνει το k του αντικειμένου a που είναι 9.
4. cout<<b.A::k<<"\n"; Εκτυπώνει το A::k στο αντικείμενο b και είναι 17.
5. pa=&a; Ορίζουμε την pa να δείχνει στο αντικείμενο a.
6. pa->out(); Εκτελούμε την out() του a αντικειμένου αφού το pa δείχνει στο a και έχουμε k=k+2, άρα κ=11 και το εκτυπώνει.
7. pb=&b; Ορίζουμε την pb να δείχνει στο αντικείμενο b.
8. pb->out(); Εκτελούμε την out() του b αντικειμένου αφού το pb δείχνει στο b και έχουμε k+=17, άρα το k γίνεται 17+4=21, και A::k+=3, άρα Α::k=17+3=20 και εκτυπώνει το 21.
9. pa=&b; Ξαναορίζουμε την pa να δείχνει στο b αυτή τη φορά.
10. pa->out(); Το pa στέλνει στην out του τύπου Α αντικειμένων το Α::k από το αντικείμενο b. Προσοχή! Το Α::k γίνεται k και το k δε μεταφέρεται αφού δεν έχει οριστεί B::k στο Α. Εκτυπώνει, δηλαδή Α::k+2=22.

Αυτά.... Ελπίζω να σε βοήθησα!  ;)


ευχαριστώ πολύ....
στο βήμα 2 όμως δεν μπορώ να καταλάβω γιατί δεν αλλάζει το κ στην Α κλάση


Title: Re: [C++] τι τυπωνει
Post by: nemdam on January 31, 2011, 21:33:46 pm
Εάν το k ήταν static, τότε θα άλλαζε η τιμή του. Τα 2 k είναι διαφορετικά μεταξύ τους.


Title: Re: [C++] τι τυπωνει
Post by: kostas15 on January 31, 2011, 21:55:20 pm
Εάν το k ήταν static, τότε θα άλλαζε η τιμή του. Τα 2 k είναι διαφορετικά μεταξύ τους.

ευχαριστώ αλλά δεν μπορώ να καταλάβω αυτήν την διαφορά...
δηλαδή αυτό το A::k είναι κάτι σαν νέα μεταβλητή
που ανήκει στην Β αλλά δεν επηρεάζει την A ούτε το κ της Β;


Title: Re: [C++] τι τυπωνει
Post by: Rising Force on January 31, 2011, 22:00:39 pm
To *pa έχει οριστεί σαν αντικείμενο του Α στην πρώτη γραμμή. Οπότε όταν εκτελείται, εκτελεί τις εντολές που περιλαμβάνονται στα αντικείμενα του Α!

Σωστά, αυτό που είπα θα ίσχυε αν η A.out είχε δηλωθεί ως virtual... ευχαριστώ.


Title: Re: [C++] τι τυπωνει
Post by: balagio on January 31, 2011, 22:04:57 pm
δηλαδη υπαρχει διαφορα αναμεσα σε  a.k και A::k??


Title: Re: [C++] τι τυπωνει
Post by: nemdam on January 31, 2011, 22:12:12 pm
το A.k είναι η μεταβλητή. Το Α::k απλά λαμβάνει την τιμή της A.k . Δεν μπορεί να τη μεταβάλει κιόλας!


Title: Re: [C++] τι τυπωνει
Post by: Chester on February 01, 2011, 00:18:13 am
Παιδια για το 3ο θεμα του φεβρουαριου 2003 βρηκα μια εξηγηση καπου εδω σε ενα αλλο thread αλλα ετσι οπως το εξηγει ο συναδερφος δεν μπορω να το καταλαβω...
Υπαρχει καποιος που να το πει εστω και με λιγο πιο κατανοητα λογια?? Μονο για την πρωτη εκτυπωση, μετα πιστευω θα καταλαβω αφου ειναι σχετικα παρομοια.