Article View: pl.comp.lang.pascal
Article #93163Re: Przeciazanie jak w delphi
From: webmajsterek
Date: Wed, 13 Apr 2011 17:05
Date: Wed, 13 Apr 2011 17:05
78 lines
2608 bytes
2608 bytes
> Problemem jest w zasadzie to, że potrzebny jest do tego garbage collector,
> lub przynajmniej zliczanie referencji.
w delhi.net jakoś się udało .
>
> var a,b,c,d:TMojaKlasa;
>
> begin
> a:=TMojaKlasa.Create;
> b:=TMojaKlasa.Create;
> c:=TMOjaKlasa.Create;
>
> d:= a + b + c;
kompilator przetłumaczył by to na cos takiego
if d=nil Then d:=TMojaClasa.Create;
d.Add(a);
d.Add(b);
d.Add(c);// procedura add była by odpowiednikem d+=b;
>
> zakładając, że operator + tworzy nowy obiekt na stercie (czyli odpala
> TMojaKlasa.Create), co i kiedy zniszczy ci obiekt tymczasowy o wartości a+b?
>
jak bawiłem się przeciążeniami dla klas to robiłem tak
operator +(a,b:TMojaKlasa):R:TMojaKlasa;
begin
a.Aad(b);
R:=b;
end;
Tylko musiałem pamietać żeby wywoływać w jeden sposób
ZZ+=YY; lub ZZ:=ZZ+YY;
Gdyby ten fragment kodu odpowiadający za oabsługe operatora ( operator ) był na
jakiś specialnych i w momęcie wywołania w zmiennej R (Result ) był już adres
obiektu który ma otrzymać dane to w zasadzie byłoby to rozwiązanie i nie
trzeba by dodatkowo dodawać skomplikowanych mechanizmów zarzadzania pamięcią .
wtedy by operaator wyglądał tak
operator +(a,b:TMojaKlasa):R:TMojaKlasa;
begin
if R<>a then begin R:=0;// wyczyść np liczbe
R.Add(A);
R.Add(b)
end else R.Add(b);
end;
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID:
<129b.0000009c.4da5d7f3@newsgate.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.straub-nv.de!news-2.dfn.de!news.dfn.de!news.uni-stuttgart.de!news.nask.pl!news.nask.org.pl!news.cyf-kr.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.m10r2.onet.pl!niusy.onet.plReferences:
<io4i7i$2dr$2@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!newsfeed.straub-nv.de!news-2.dfn.de!news.dfn.de!news.uni-stuttgart.de!news.nask.pl!news.nask.org.pl!news.cyf-kr.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.m10r2.onet.pl!niusy.onet.pl From: webmajsterek@poczta.onet.pl Newsgroups: pl.comp.lang.pascal Subject: Re: Przeciazanie jak w delphi Date: Wed, 13 Apr 2011 19:05:55 +0200 Organization: Onet.pl Lines: 78 Sender: news@newsgate.onet.pl Message-ID: <129b.0000009c.4da5d7f3@newsgate.onet.pl> References: <io4i7i$2dr$2@news.onet.pl> NNTP-Posting-Host: newsgate.m10r2.onet.pl Mime-Version: 1.0 X-Trace: newsgate.onet.pl 1302714356 29972 213.180.150.14 (13 Apr 2011 17:05:56 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Wed, 13 Apr 2011 17:05:56 +0000 (UTC) X-Mailer: http://niusy.onet.pl X-Forwarded-For: 83.20.42.156, 10.174.28.61 X-User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit