Re: C++ pointer & reference ερωτηση
basos g
noxelia at gmail.com
Fri Dec 26 03:23:41 EET 2008
> Να σας πω τι με ενοχλεί περισσότερο με τις αναφορές?
> (Διορθώστε με αν κάνω λάθος).
>
> Με ενοχλεί οτι αναφορές σε αντικείμενα δε μπορείς να τις ορίσεις σαν "μέλη"
> μιας κλάσης, ενώ αντίθετα μπορείς να ορίσεις δείκτες σε αντικείμενα σαν μέλη
> μιας κλάσης, τα οποία μετά κάνεις allocate στον constructor.
>
> Δηλαδή, για να γίνω αντιληπτός, με δείκτες μπορείς να κάνεις αυτό:
>
> class Foo
> {
> Foo (int x);
> ...
> }
>
> class Bar
> {
> Bar ();
> private:
> void myMethod(Foo *);
> Foo *aFoo;
> Foo *bFoo;
> ...
> }
>
> Bar::Bar()
> {
> aFoo = new Foo(5);
> bFoo = new Foo(10);
> ...
> myMethod(aFoo);
> }
>
> Όμως αντίθετα με αναφορές δε μπορείς να κάνεις κάτι σαν αυτό:
>
> class Foo
> {
> Foo (int x);
> ...
> }
>
> class Bar
> {
> Bar ();
> private:
> void myMethod(Foo &);
> Foo aFoo(5);
> Foo bFoo(10);
> ...
> }
>
> Bar::Bar()
> {
> myMethod(aFoo);
> }
>
> Αυτό είναι το βασικό μου πρόβλημα, και γι'αυτό μου φαίνονται πολύ πιο
> ευέλικτοι οι δείκτες.
>
Παντως στο παραδειγμα που εχεις παραπανω (τ οδευτερο) τα
Foo aFoo;
Foo bFoo;
είναι αντικείμενα μέλη (και όχι αναφορές, δεν εχουν & ) και ως εκ
τουτου μπορουν να αρχικοποιηθουν στον ctor ως
Bar::Bar()
: aFoo( 5 )
{
///other init stuff
}
Επίσης περί των παραμετρων των συναρτησεων θα συμφωνισω με καποιον που ειπε
βαλε reference me const σε αυτες που δε θες να αλλαξεις και pointer ειδάλως..
Ακομα μια αλλη περίπτωση ειναι να θελεις να περνας μια παραμετρο προαιρετικά
px
time_t time ( time_t* p_time )
επιστρεφει την ωρα ως time_t
Επιπλεον ομως αμα βαλεις το p_time != NULL σου την δίνει και εκει
time_t a , b ;
a = time_t( NULL ) ;
ή
a = time_t( &b ) ;
More information about the Linux-greek-users
mailing list