🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15234

Re: pl.comp.objects FAQ (Frequently Asked Questions and more)

#15234
From: rwt
Date: Thu, 22 Feb 2007 23:29
74 lines
2805 bytes
Odpowiedź do listu Wielce Szanownej Pani / Szanownego Pana ‹SasQ›.
Wysłannik wyższej inteligencji tako rzecze :):

>> T.2.9	Co to jest konstruktor kopiujacy?

>> Konstruktor kopiujacy jest bardzo podobny do operatora przypisania,
>> tyle ze o ile operator przypisania uzywany jest dla obiektow juz
>> istniejacych, to konstruktor kopiujacy gdy tworzymy nowy obiekt i
>> jednoczesnie nadajemy mu jakas wartosc. Przyklad (bo bez przykladu
>> raczej malo kto zrozumie :-) ):

> Czemu? Po prostu chodzi o zwyczajną inicjalizację nowo tworzonego
> biektu wartością innego obiektu tego samego typu ;)


>>  A d;          // A tutaj operator przypisania z tym samym argumentem

> Raczej linijkę niżej ;) o tu:

>>  d=b;


>> Konstruktor kopiujacy jest tylko i wylacznie wtedy gdy
>> przypisanie nastepuje rownoczesnie z utworzeniem.

> Ale wtedy to nie jest przypisanie, tylko inicjalizacja ;P
> Przypisuje się do obiektów już skonstruowanych.
> Jak nie łapiesz różnicy, to spróbuj z obiektami const:
> można je tylko inicjalizować, ale nie można do nich już
> później przypisywać.


>> Dlaczego to wyroznienie? Pozwala to zaoszczedzic operacji,
>> bo oczywiscie moglo by byc i tak ze kazda instrukcja typu
>> "A b=c;" bylaby rozbijana na dwie: "A b; b=c;".

> Tu akurat nie to jest najważniejsze ;)
> Ponownie polecam popróbować z const ;)
> Jeśli obiekt jest const, nie możesz do niego już nic przypisać
> po utworzeniu. Jeśli chcesz ustawić wartość obiektu stałego
> "na wzór" innego obiektu, to jedyny moment, gdzie jest to możliwe,
> jest przy konstruowaniu. Później jest już "po ptokach" :P
> I tu się właśnie przydaje konstruktor kopiujący, zwany też
> "inicjalizatorem kopiującym" ;J


>> Ale wtedy niepotrzebnie obiekt "b" bylby dwa razy inicjowany

> Inicjuje się czynności. Obiekty się inicjalizuje.
> I nie słuchaj słownika Kopalińskiego, jego autorzy nie wiedzą
> co to jest programowanie ;)


>> Najbardziej znane przyklady sprytnych wskaznikow to string
>> (opakowujacy wskaznik do char)

> ?? :P
> Tak rozumując, to każda klasa, która zawierałaby w swojej
> implementacji jakieś wskaźniki i je obsługiwała, musiałaby
> być "sprytnym wskaźnikiem" :P  Ja bym raczej zawęził ten termin
> do obiektów "symulujących" zwykłe wskaźniki w widoczny sposób.

Można by zauważyć, że dla zmiennych typu klasa nie zachodzą
przypisania. Tak naprawdę dla nich są tylko inicjalizacje. Natomiast
przypisania pozostały dla zmiennych prymitywnych oraz referencji,
wskaźników.


Wasz
--
/ qo   |)    :@=N%_g=v=a=g_eD_e=c()=d=8! =%!Gn@8're. w8in/ad
\    _x/ ,   ;h-%-a'hA'H4,X0'Xo~xo~xO,R`-%EXp01ITed: *-7/+eh
/    |    ng `-%__%--'__%--'__%--~__%--^%B`/$qV3r[o; &GooMee
L o_O http://tech.groups.yahoo.com/group/opRWTng O_o L"EnOF"

Message-ID: <erl5gf$bi2$1@inews.gazeta.pl>
Path: polish.pugleaf.net!archive.newsdeef.eu!mbox2nntp-pl.comp.objects.mbox.gz!number1.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.gazeta.pl!not-for-mail
References: <pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl> <pan.2007.02.22.19.13.55.43827@go2.pl>