🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #93163

Re: Przeciazanie jak w delphi

#93163
From: webmajsterek
Date: Wed, 13 Apr 2011 17:05
78 lines
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.pl
References: <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