Article View: pl.comp.objects
Article #15234Re: pl.comp.objects FAQ (Frequently Asked Questions and more)
From: rwt
Date: Thu, 22 Feb 2007 23:29
Date: Thu, 22 Feb 2007 23:29
74 lines
2805 bytes
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>