Article View: pl.comp.objects
Article #4719Re: Prawda o C++
From: A. Hajderek
Date: Wed, 20 Jan 1999 17:54
Date: Wed, 20 Jan 1999 17:54
74 lines
3059 bytes
3059 bytes
>Nie na poziomie programu ? Hmm..
>
>class aaa
>{
> int a;
> int b;
>};
>
>class bbb
>{
> int a;
> int b;
> int & c;
>};
>
>#include <stdio.h>
>
>int main ()
>{
> printf("%d %d", sizeof(aaa), sizeof(bbb));
>}
>
>Jakie beda wyniki ?.
Dosc naciagane. Clasa 'bbb' kompiluje sie, ale nie mozna utworzyc obiektu
tej klasy.
Jedyna mozliwosc to dopisanie konstruktora, a konstruktor nie
skompiluje sie jesli nie bedzie inicjalizowac skladowej 'c'.
Zainicjalizowanie skladowej bedacej referencja jest mozliwe
tylko poprzez inicjalizator - tzn.
bbb() : c(cos_tam) { }.
Raz zainicjalizowana skladowa 'c' zawsze bedzie referencja do obiektu
uzytego podczas jej inicjalizacji. Tak samo jest w przypadku parametrow
funkcji:
void function(int &value)
jak i w przypadku prostego zadeklarowania lokalnej/globalnej zmiennej
referencyjnej:
int a;
int &value = a;
W kazdym z tych przypadkow zmienna referencyjna zachowuje sie tak samo:
1. Mozna ja zainicjalizowac tylko raz.
2. Po zainicjalizowaniu 'reprezentuje ona' obiekt, ktory byl parametrem
inicjalizacji,
tzn. wszelkie odwolania do niej beda mialy taki sam skutek jak odowlania do
obiektu 'oryginalnego'.
3. To czy zmienna referencyjna ma swoja 'fizyczna' reprezentacje w postaci
wskaznika
lub czegokolwiek innego nie ma znaczenia, choc nietrudno sie domyslic, ze
np.
int a;
int &value = a;
moze zostanie calkowicie zoptymalizowane przez kompilator; ze wprzypadku
funcji
void function(int &value)
zmienna referencyjna bedzie zaimplementowana niejawnie jako adres
(wskaznik).
Podobnie bedzie w przypadku skladowej referencyjnej.
Wszystko jest bardzo konsekwentne.
Pozdrawiam,
Andrzej
Technical Details
Message-ID:
<916854946.11215.0.nnrp-02.c2d9616c@news.demon.co.uk>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.icm.edu.pl!uw.edu.pl!newsgate.cistron.nl!het.net!news-feed.inet.tele.dk!bofh.vszbr.cz!dispose.news.demon.net!demon!news.demon.co.uk!demon!melisa.lscope.co.uk!not-for-mailReferences:
<77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl> <781vtm$9l8$3@polonez.man.lodz.pl> <36a58e24.0@news.vogel.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.icm.edu.pl!uw.edu.pl!newsgate.cistron.nl!het.net!news-feed.inet.tele.dk!bofh.vszbr.cz!dispose.news.demon.net!demon!news.demon.co.uk!demon!melisa.lscope.co.uk!not-for-mail From: "A. Hajderek" <andrew@logicscope.net> Newsgroups: pl.comp.objects Subject: Re: Prawda o C++ Date: Wed, 20 Jan 1999 17:54:19 -0000 Message-ID: <916854946.11215.0.nnrp-02.c2d9616c@news.demon.co.uk> References: <77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl> <781vtm$9l8$3@polonez.man.lodz.pl> <36a58e24.0@news.vogel.pl> NNTP-Posting-Host: melisa.lscope.co.uk X-NNTP-Posting-Host: melisa.lscope.co.uk:194.217.97.108 X-Trace: news.demon.co.uk 916854946 nnrp-02:11215 NO-IDENT melisa.lscope.co.uk:194.217.97.108 X-Complaints-To: abuse@demon.net X-Newsreader: Microsoft Outlook Express 4.72.2106.4 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Lines: 77 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit