WIFI w Warszawie


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator +=
> ale numer -- a ja myslalem ze mozna "+=" przeciazyc - a to ma dla
> unitu ktory pisze znaczenie
> bo dodawanie przyspieszylo by mi kod ;

Ale o co ci chodzi, zamiast += przeciąż sobie +.


--
Azarien


From: webmajsterek gmail.com
Subject: Re: operator +=
On 26 Maj, 16:32, "Wiktor S." <SPAM.wswik... poczta.SPAM.fm.SPAM>
wrote:
> > ale numer -- a ja myslalem ze mozna "+=3D" przeciazyc - a to ma dla
> > unitu ktory pisze znaczenie
> > bo dodawanie przyspieszylo by mi kod ;
>
> Ale o co ci chodzi, zamiast +=3D przeci=B1=BF sobie +.

chialem miec po prostu dwie procedury dodawania -- jedna
zoptymalizowana pod katem tego ze liczba ktora dodaje jest
jednoczesnie miejscem gdzie bedzie wynik .

bo teraz jak mam
c:=3Dc+a;
tu musze robic tak
temp:=3Dc+a;
c:=3Dtemp;

inaczej otrzymuej zly wynik; ( dodatkow takie dodawanie bylo by
szybsze )


From: webmajsterek gmail.com
Subject: Re: operator +=
On May 26, 3:56 pm, =A3ukasz 'Maly' Ostrowski <m... USUNnemo.pl> wrote:

>
> Mo=BFesz sobie przeci=B1=BFy=E6 tylko:
> - < > =3D> <=3D =3D
> - + - / * **
> - i operator przypisania-konwersji.

mozna przeciazyc jeszcze ">>" ( odpowiednik shl , ) i "<<" ( SHR )

>
> Wi=EAc formalnie wolny jest tylko **(operator pot=EAgowania).
> Nic nowego nie zdefiniujesz no chyba =BFe chcesz korzysta=E6 z
> w=B3asnego fpc, przerobionego ;).

tak szukalem czy nie ma gdzies pliku definujacego operatory -- albo
skladnie gdzie mzona by w prosty sosob walnac nowa linijke i nowy
operator ale nei dokopalem sie .

>
> > wtey wiedzial bym ze to wywolanie odpowiada +=3D
>
> > -- z tym ze ja juz bym wiedzial o jaki tryb dodawania chodzi .
>
> Zamiast kr=EAci=E6 i zaciemnia=E6 kod "dziwnymi/niepasuj=B1cymi" do
> kontekstu operatorami, zr=F3b tylko metody do gmerania na obiektach.
> Kombinacje niczym dobrym sie nie skoncz=B1. No chyba =BFe z tego
> liba tylko Ty chcesz korzystac. Bo jak ja bym mia=B3 mie=E6 liba
> ktory dodawanie realizuje za pomoc=B1 operatora (+-xyz xor) to
> bym sobie podarowa=B3.

tylko konwertuje unit z netu do fp i jego dobrodziejst ( przeciazanie
operatorow )

teraz np zeby zrobi a,b,c:TNumber; e:byte;
c:=3Da*(b+e);
trzeba wywolac

b:=3DAddByte(b,e);
c:=3DMull(a,b);

i jest to malo czytelne w kodzie .

tylko ja bede go uzywac -- wiec nie ma problemu .

>
>
> >> Kompiluje si=EA do(zb=EAdne rzeczy wyci=EAte):
>
> >> .globl PASCALMAIN
>
> >> <snip>
>
> >> leave
> >> ret
> >> .balign 4
>
> > jak uzyskalaes taki wydruk ( jakiegos deasemblera uzyles ?? )
>
> =AFadnego disassemblera nie u=BFy=B3em.
>
> $ fpc -a costam.pas
>
> Dostaniesz costam.s z asmem w sk=B3adni ATT.
>
> p.s. RTFM - (Read The Fucking/Friendly Manual) s=B1 tam informacje
> o operator overloading i o parametrach kompilacji fpc...

jestes chodzaca encyklopedia -- dzieki za pomoc .


From: =?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= <maly USUNnemo.pl>
Subject: Re: operator +=
webmajsterek gmail.com wrote:
> bo teraz jak mam
> c:=c+a;
> tu musze robic tak
> temp:=c+a;
> c:=temp;


Jakim cudem otrzymujesz zły wynik? Źle overloadnąłeś operator +.

--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/


From: =?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= <maly USUNnemo.pl>
Subject: Re: operator +=
webmajsterek gmail.com wrote:
> mozna przeciazyc jeszcze ">>" ( odpowiednik shl , ) i "<<" ( SHR )

Wymieniając operatory które są overloadable jako reference miałem
dokumentacje fpc, a tam się te operatory nie znajdują ;).

> tak szukalem czy nie ma gdzies pliku definujacego operatory -- albo
> skladnie gdzie mzona by w prosty sosob walnac nowa linijke i nowy
> operator ale nei dokopalem sie .

Szczerze mówiąc nie zdziwiłem się że nie znalazłeś. :P

> tylko konwertuje unit z netu do fp i jego dobrodziejst ( przeciazanie
> operatorow )
>
> teraz np zeby zrobi a,b,c:TNumber; e:byte;
> c:=a*(b+e);
> trzeba wywolac
>
> b:=AddByte(b,e);
> c:=Mull(a,b);
>
> i jest to malo czytelne w kodzie .

Obiektówka?
b.Add(e);
a.Mul(b);
?

>> Żadnego disassemblera nie użyłem.
>> $ fpc -a costam.pas
>> Dostaniesz costam.s z asmem w składni ATT.
>>
>> p.s. RTFM - (Read The Fucking/Friendly Manual) są tam informacje
>> o operator overloading i o parametrach kompilacji fpc...
> jestes chodzaca encyklopedia -- dzieki za pomoc .


Wiem, i do tego skromny jestem ;).

--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/


From: webmajsterek gmail.com
Subject: Re: operator +=
On May 27, 11:35 am, =A3ukasz 'Maly' Ostrowski <m... USUNnemo.pl> wrote:
> webmajste... gmail.com wrote:
> > mozna przeciazyc jeszcze ">>" ( odpowiednik shl , ) i "<<" ( SHR )
>
> Wymieniaj=B1c operatory kt=F3re s=B1 overloadable jako reference mia=B3em
> dokumentacje fpc, a tam si=EA te operatory nie znajduj=B1 ;).

a ja to technika macanowa wykrylem :-) -- kompilator daje przeciazyc
te operatory ( sprawdzilem ) .


>
> > tak szukalem czy nie ma gdzies pliku definujacego operatory -- albo
> > skladnie gdzie mzona by w prosty sosob walnac nowa linijke i nowy
> > operator ale nei dokopalem sie .
>
> Szczerze m=F3wi=B1c nie zdziwi=B3em si=EA =BFe nie znalaz=B3e=B6. :P

nie znalalzlem bo nie wiem czego dokladnie szukac -- myslalem ze
bedzie to gdzies w plikach yacc zdefiniowane -- albo podobnych ale ne
znalazlem .

>
> > tylko konwertuje unit z netu do fp i jego dobrodziejst ( przeciazanie
> > operatorow )
>
> > teraz np zeby zrobi a,b,c:TNumber; e:byte;
> > c:=3Da*(b+e);
> > trzeba wywolac
>
> > b:=3DAddByte(b,e);
> > c:=3DMull(a,b);
>
> > i jest to malo czytelne w kodzie .
>
> Obiekt=F3wka?
> b.Add(e);
> a.Mul(b);
> ?

wlasnie tak kombinuje -- ale najwiekszy naciks chialem polozyc na
przeciazenie operatorow -- zeby nie trzeba bylo zapoznawac sie z
biblioteka ( po miesiacu nie uzywania unitu zapomina sie jego
konstrukcje i nazwe procedur) .
latwa jest tez pozniejsze zmiana kodu jak jest po prostu napisane c:=3Da
+b; niz c.Sum(A,B);




From: Solaris <solaris be.inspired>
Subject: Re: operator +=
Dnia 27 May 2007 09:17:47 -0700, jak=BFe pi=EAknego
webmajsterek gmail.com wystuka=B3 co zawarte poni=BFej:

:: wlasnie tak kombinuje -- ale najwiekszy naciks chialem polozyc na
:: przeciazenie operatorow -- zeby nie trzeba bylo zapoznawac sie z
:: biblioteka ( po miesiacu nie uzywania unitu zapomina sie jego
:: konstrukcje i nazwe procedur) .
:: latwa jest tez pozniejsze zmiana kodu jak jest po prostu napisane c:=3Da
:: +b; niz c.Sum(A,B);

I tak tego nitk pr=F3cz Ciebie nie b=EAdzie u=BFywa=B3. A jak zapominasz to=
komentuj.


--=20
Born to raise hell.
Linux registered user: 408584
Contact: GG#3802676, solaris#idns.pl
19:16:28 -!- Platyna Erroneous Nickname=20


From: webmajsterek gmail.com
Subject: operator =
rekatywacja -- mam znowu klopot i nie wiem z czego wynika .

mam objekt
type class=TNumber
....
end;


przeciazylem juz operatory + , <, > -- zadnych klopotow .

jednak jak chce przeziacyc operator = ( do konstrukcji if ..
then ) to kompilator sie buntuje .

operator = ( A,B : TNumber) C:Boolean;
Error: Impossible operator overload

no i tu pytanie dla czego nie mozna przeciazyc '=' ?? czyzby
zabronione bylo przeciazanie operatora porownania ( ronosci ) dla
obiektow ???


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
webmajsterek gmail.com wrote:
> rekatywacja -- mam znowu klopot i nie wiem z czego wynika .
>
> mam objekt
> type class=TNumber
> ....
> end;
>
>
> przeciazylem juz operatory + , <, > -- zadnych klopotow .
>
> jednak jak chce przeziacyc operator = ( do konstrukcji if ..
> then ) to kompilator sie buntuje .
>
> operator = ( A,B : TNumber) C:Boolean;
> Error: Impossible operator overload
>
> no i tu pytanie dla czego nie mozna przeciazyc '=' ?? czyzby
> zabronione bylo przeciazanie operatora porownania ( ronosci ) dla
> obiektow ???

Owszem. Zmienna klasowa jest referencją (wskaźnikiem) na instancję, a nie
instancją. sizeof(jakaśklasa) zawsze da ci 4 - czyli rozmiar wskaźnika.
Wskaźniki, jak to wskaźniki - są równe albo nie, przeciążanie tego nie jest
możliwe.

jeżeli

type a,b:TJakasKlasa;

a:=TJakasKlasa.Create;
b:=a;
a.jakiespole:=10;

to b.jakiespole jest również równe 10! bo jest to TEN SAM OBIEKT. Jeżeli

b.free;

to a też jest zniszczone.

Jeśli chcesz porównać dwa obiekty poprzez np. porównanie ich wszystkich
pól - to musisz to zrobić np. tak

a.CzyRowne(b)

albo

CzyJakasKlasaRowne(a,b)


--
Azarien


Kosmetyki naturalne


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
Przeciążasz operatory na klasach, więc wiedz, że jest to trochę
niebezpieczne:

var a,b,c,d:TJakasKlasa;


c:=a+b;

zadziała prawidłowo, ale

a:=a+b;

oraz

d:=a+b+c;

spowodują wyciek pamięci. Dlaczego? w operatorze + musisz tworzyć nowy
obiekt poprzez Create.

jeśli więc wykonujesz

a:=a+b

czyli tak naprawdę

temp:=a+b; // tu jest temp.create
a:=temp;

to tracisz referencję do poprzedniego a, które NIE JEST niszczone.

w drugim przypadku

d:=a+b+c

czyli

temp1:=a+b // temp1.create
temp2:=temp1+c // temp2.create
d:=temp2;

tracisz to pośredniczące temp1.

Rozwiązaniem jest używanie interfejsów i klas pochodnych od
TInterfacedObject. Wtedy destruktor jest wywoływany automatycznie, jeśli
obiekt zostanie w ten sposób "zgubiony".


type IJakisTyp=interface
metody i właściwości publiczne...
bez konstruktora i destruktora.
end;

type TJakisTyp=class(IJakisTyp,TInterfacedObject)
metody i właściwości te co wyżej, plus reszta (prywatne, pola itp.)
constructor Create;
destructor Destroy; override; // opcjonalnie
end;

tutaj metody klasy TJakisTyp;

operator +(a,b:IJakisTyp):IJakisTyp;
begin
result:=TJakisTyp.Create;
{ result jest typu IJakisTyp, ale uruchamiamy konstruktor klasy
TJakisTyp }
tutaj dodawanko...
end;

var a,b,c,d:IJakisTyp; // operujemy tylko na IJakisTyp;

begin
a:=TJakisTyp.Create; // tworzenie jak wyżej.
b:=TJakisTyp.Create;
c:=TJakisTyp.Create;
...
d:=a+b+c;
{ pośredni wynik a+b zostanie utworzony, i automatycznie zniszczony. można
się o tym przekonać dając jakieś writeln w konstruktorze i destruktorze typu
TJakisTyp }


// pod koniec programu automatycznie zniszczone zostaną a, b, c, d
// jeśli nie wywołano destruktora ręcznie.
end.




--
Azarien


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
Drugim rozwiązaniem jest używanie typów "object" zamiast "class" (ze
wszystkimi tego konsekwencjami).
Takie obiekty będą niszczone automatycznie.


--
Azarien


From: webmajsterek gmail.com
Subject: Re: operator =
On 28 Maj, 12:15, "Wiktor S." <SPAM.wswik... poczta.SPAM.fm.SPAM>
wrote:
> Drugim rozwi=B1zaniem jest u=BFywanie typ=F3w "object" zamiast "class" (ze
> wszystkimi tego konsekwencjami).
> Takie obiekty b=EAd=B1 niszczone automatycznie.


eee dziala przeciazenie operatora "=3D" dla object -- a dla class
nie dziala .

i tu moje glupie pytanie czym sie rozni class od object ??? ja
zawsze myslalem ze class=3Dobject -- a wprowadzono to dla zgodnosci z
delphi -- a delphi to wprowadzono bo ewaluowal w strone c++
( gdzie sa klasy i mzoliwosc dziedziczenia po kilku przodkach )


From: =?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= <maly USUNnemo.pl>
Subject: Re: operator =
webmajsterek gmail.com wrote:
> On 28 Maj, 12:15, "Wiktor S." <SPAM.wswik... poczta.SPAM.fm.SPAM>
> wrote:
>> Drugim rozwiązaniem jest używanie typów "object" zamiast "class" (ze
>> wszystkimi tego konsekwencjami).
>> Takie obiekty będą niszczone automatycznie.

Niszczone automatycznie *nie będą*, najwyżej zwijane ze stacka.

> eee dziala przeciazenie operatora "=" dla object -- a dla class
> nie dziala .

Bo typ class jest referencja/wskaźnikiem na object. I porównanie
wskaźników musi zostać takie jakie jest internal - czyli numeryczne
(czy adres=adres i nic ponadto).

> i tu moje glupie pytanie czym sie rozni class od object ??? ja
> zawsze myslalem ze class=object -- a wprowadzono to dla zgodnosci z
> delphi --

object to jest value-type,
class to reference-type,

w uproszczeniu:
type
TMyObj = object
public
i,j,k,l,m:integer;
end;

TMyCls = class
public
i,j,k,l,m:integer;
end;


procedure foo();
var
o : TMyObj;
c : TMyCls;

// c musisz utworzyć bo jest tylko wskaznikiem w kosmos, oraz
// musisz c później zniszczyć za pomocą metody Free().
// o jest utworzone jako zmienna automatyczna i zostanie zwiniete
// podczach wychodzenia z aktualnego scope.

begin
o.i:=1337;
c.i:=1337; <-- segmentation fault. c prowadzi w kosmos.
c := TMyCls.Create();
c.i:=1337; <-- git.

// Ponadto, o podczas przekazywania jest kopiowane "wgłąb",
// c jest rzucane do wnetrza inncyh f-cji jako ref do obiektu.

bar(o,c);
end;

procedure bar(o:TMyObj; c:TMyCls);
begin
// jak tutaj zmienisz o - to obj z foo() zostanie niezmieniona
// ale jak zmienisz c - to instancja w foo() też zostanie
// zmieniona.
end.

> a delphi to wprowadzono bo ewaluowal w strone c++
> ( gdzie sa klasy i mzoliwosc dziedziczenia po kilku przodkach )

W Delphi nie ma wielodziedziczenia. Są interfejsy.

--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
>>> Drugim rozwiązaniem jest używanie typów "object" zamiast "class" (ze
>>> wszystkimi tego konsekwencjami).
>>> Takie obiekty będą niszczone automatycznie.
>
> Niszczone automatycznie *nie będą*, najwyżej zwijane ze stacka.

No dobrze, ale nie będzie wycieków pamięci.

> W Delphi nie ma wielodziedziczenia. Są interfejsy.

A by się przydało... [przeciwnicy - sio! :-)]


--
Azarien


From: webmajsterek gmail.com
Subject: Re: operator =
On May 28, 4:15 pm, =A3ukasz 'Maly' Ostrowski <m... USUNnemo.pl> wrote:
> webmajste... gmail.com wrote:
> > On 28 Maj, 12:15, "Wiktor S." <SPAM.wswik... poczta.SPAM.fm.SPAM>
> > wrote:
>
> Bo typ class jest referencja/wska=BCnikiem na object. I por=F3wnanie
> wska=BCnik=F3w musi zosta=E6 takie jakie jest internal - czyli numeryczne
> (czy adres=3Dadres i nic ponadto).
>
> > i tu moje glupie pytanie czym sie rozni class od object ??? ja
> > zawsze myslalem ze class=3Dobject -- a wprowadzono to dla zgodnosci z
> > delphi --
>
> object to jest value-type,
> class to reference-type,
>
> w uproszczeniu:
> type
> TMyObj =3D object
> public
> i,j,k,l,m:integer;
> end;
>
> TMyCls =3D class
> public
> i,j,k,l,m:integer;
> end;
>
> procedure foo();
> var
> o : TMyObj;
> c : TMyCls;
>
> // c musisz utworzy=E6 bo jest tylko wskaznikiem w kosmos, oraz
> // musisz c p=F3=BCniej zniszczy=E6 za pomoc=B1 metody Free().
> // o jest utworzone jako zmienna automatyczna i zostanie zwiniete
> // podczach wychodzenia z aktualnego scope.
>
> begin
> o.i:=3D1337;
> c.i:=3D1337; <-- segmentation fault. c prowadzi w kosmos.
> c :=3D TMyCls.Create();
> c.i:=3D1337; <-- git.
>
> // Ponadto, o podczas przekazywania jest kopiowane "wg=B3=B1b",
> // c jest rzucane do wnetrza inncyh f-cji jako ref do obiektu.
>
> bar(o,c);
> end;
>

aha juz czaje -- po prostu clasa to cosik takiego

type PJakis=3D^Tjakis;
TJakis=3Dobject( jakis_przodek )

wlasnie probowalem przeciazyc taka konstrukcje i sie nie dalo .


From: DarekM <darekm emadar.com>
Subject: Re: operator =

> aha juz czaje -- po prostu clasa to cosik takiego
>
> type PJakis=^Tjakis;
> TJakis=object( jakis_przodek )

poczytaj sobie
http://www.oreilly.com/catalog/delphi/chapter/ch02.html

Darek


From: lukasz.tomczyk gmail.com
Subject: =?iso-8859-2?q?Re:_Turbo_Pascal_do_C++_--_jak_przekonwertowa=E6=3F=3F?=
case lh=1 of
true: begin
write('HL = ');
readln(hl);
write(chr(232),'[',chr(236),'] = ');

readln(it);
if el=1 then
begin
k[1,1]:=k[1,1]+2*pi*r1*hl;
r:=r1;
sq[1]:=sq[1]+2*pi*hl*r*it
end;
if el=es then
begin
k[2,2]:=k[2,2]+2*pi*r2*hl;
r:=r2;
sq[2]:=sq[2]+2*pi*hl*r*it
end;
end;
false: begin
repeat
write('Jezeli QG ma wartosc-GQ=1,jezeli nie-GQ=0, GQ = ');
readln(gq);
until (gq=0) or (gq=1);
if gq<>0 then
begin
write('qG = ');
readln(qg);
if el=1 then
begin
r:=r1;
sq[1]:=sq[1]-2*pi*r*qg
end;
if el=es then
begin
r:=r2;
sq[2]:=sq[2]-2*pi*r*qg
end;
end;
end;
end
end;

ciekawe zastosowanie instrukcji case... nie lepiej if .. else ?? :D



From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
> aha juz czaje -- po prostu clasa to cosik takiego
>
> type PJakis=^Tjakis;
> TJakis=object( jakis_przodek )
>
> wlasnie probowalem przeciazyc taka konstrukcje i sie nie dalo .

Tak, klasa ma automatycznie to ^. Tylko oczywiście class to mimo wszystko
nie jest to samo co taki sam object z daszkiem ;-)

--
Azarien


Naszyjniki


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: =?iso-8859-2?Q?Re:_Turbo_Pascal_do_C++_--_jak_przekonwertowa=E6=3F=3F?=
> ciekawe zastosowanie instrukcji case... nie lepiej if .. else ?? :D

czasami jest przejrzyściej :-)

ostatnio musiałem przerobić wszystkie kombinacje czterech zmiennych boolean.
Zamiast tak

if a then
begin
if b then
begin
if c then
begin
if d
then foo
else bar;
end else begin
if d
then foo
else bar;
end;
end else begin
..
..
..
..

przejrzyściej wyglądało

case a of
true : case b of
true : case c of
true : case d of
true : foo;
false : bar;
false : case d of
true : foo;
false : bar;
end;
false : case c of
true : case d of
true : foo;
false : bar;
false : case d of
true : foo;
false : bar;
end;
end;
false :
itd.
end;

Później wszystkie "false" zastąpiłem przez "else", by kod wykonywał się
odrobinę szybciej (powinien - nie mierzyłem).



--
Azarien


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: =?iso-8859-2?Q?Re:_Turbo_Pascal_do_C++_--_jak_przekonwertowa=E6=3F=3F?=
> przejrzyściej wyglądało
>
> case a of

oczywiście trochę endów zabrakło :-) prawidłowo jest

case a of
true : case b of
true : case c of
true : case d of
true : foo;
false : bar;
end;
false : case d of
true : foo;
false : bar;
end;
end;
false :

itd.


--
Azarien



From: =?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= <maly USUNnemo.pl>
Subject: Re: operator =
Wiktor S. wrote:
>> Niszczone automatycznie *nie będą*, najwyżej zwijane ze stacka.
>
> No dobrze, ale nie będzie wycieków pamięci.
>
>> W Delphi nie ma wielodziedziczenia. Są interfejsy.
>
> A by się przydało... [przeciwnicy - sio! :-)]


Na co komu wielobazowe dziedziczenie w Object Pascal'u? :P

--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/


From: Solaris <solaris be.inspired>
Subject: Re: operator =
Dnia Mon, 28 May 2007 21:48:22 +0200, jak=BFe pi=EAknego
DarekM <darekm emadar.com> wystuka=B3 co zawarte poni=BFej:

::=20
:: > aha juz czaje -- po prostu clasa to cosik takiego
:: >=20
:: > type PJakis=3D^Tjakis;
:: > TJakis=3Dobject( jakis_przodek )
::=20
:: poczytaj sobie
:: http://www.oreilly.com/catalog/delphi/chapter/ch02.html

Delphi - Operator overloading - NO

No jak to nie? Przecie=BF si=EA da ;) Nawet jest o tym ten w=B1tek ;)

--=20
Born to raise hell.
Linux registered user: 408584
Contact: GG#3802676, solaris#idns.pl
19:16:28 -!- Platyna Erroneous Nickname=20


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
>> No dobrze, ale nie będzie wycieków pamięci.
>>
>>> W Delphi nie ma wielodziedziczenia. Są interfejsy.
>>
>> A by się przydało... [przeciwnicy - sio! :-)]
>
>
> Na co komu wielobazowe dziedziczenie w Object Pascal'u? :P

Na to samo, co wszędzie. Interfejs niesie ze sobą nagłówki metod, ale czy
jest mechanizm w Object Pascalu, niosący wraz z interfejsem również ich kod?


--
Azarien


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
> Delphi - Operator overloading - NO
>
> No jak to nie? Przecież się da ;)

w 2000 roku?


--
Azarien


From: Solaris <solaris be.inspired>
Subject: Re: operator =
Dnia Tue, 29 May 2007 01:34:05 +0200, jak=BFe pi=EAknego
"Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM> wystuka=B3 co zawarte poni=
=BFej:

:: > Delphi - Operator overloading - NO
:: >
:: > No jak to nie? Przecie=BF si=EA da ;)
::=20
:: w 2000 roku?

Nie zauwa=BFy=B3em daty. ;S Ale fakt, zaktualizowa=B3by to kto=B6. ;)


--=20
Born to raise hell.
Linux registered user: 408584
Contact: GG#3802676, solaris#idns.pl
19:16:28 -!- Platyna Erroneous Nickname=20


From: =?iso-8859-2?Q?=A3ukasz_'Maly'_Ostrowski?= <maly USUNnemo.pl>
Subject: Re: operator =
Wiktor S. wrote:
>> Na co komu wielobazowe dziedziczenie w Object Pascal'u? :P
>
> Na to samo, co wszędzie. Interfejs niesie ze sobą nagłówki metod, ale
> czy jest mechanizm w Object Pascalu, niosący wraz z interfejsem
> również ich kod?

A na co Tobie taki mechanizm? Podaj realny przykład ;).

Bo chyba nie po to żeby dziedziczenie wielobazowe miało
taki sens jak normalne(relacja is-a) i wtedy chcesz
przekazywać jeden obiekt jako is-a Animal i jako
is-a Shape ;)?

--
Pozdrawiam,
Łukasz 'Maly' Ostrowski.
http://maly.nemo.pl/


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
>>> Na co komu wielobazowe dziedziczenie w Object Pascal'u? :P
>>
>> Na to samo, co wszędzie. Interfejs niesie ze sobą nagłówki metod, ale
>> czy jest mechanizm w Object Pascalu, niosący wraz z interfejsem
>> również ich kod?
>
> A na co Tobie taki mechanizm? Podaj realny przykład ;).

Jest klasa nadrzędna i kilka równoległych jej potomnych.
Jest pewien zestaw metod, z których chcę, by:

klasa nadrzędna ich nie miała,
niektóre potomne miały niektóre z nich. ale nie wszystkie miały wszystkie,
zbiór tylko częściowo się pokrywa.
jednak jeśli TKlasaPotomna i TKlasaInnaPotomna mają metodę JakasMetoda, to
jest to TA SAMA METODA.
Aby nie powielać kodu, trzeba by:

- zastosować wielokrotne dziedziczenie (ponieważ hierarchia klas musiałaby
być SIECIĄ, a nie DRZEWEM)
albo
- zastosować interfejsy niosące kod, a nie tylko nagłówki.

> Bo chyba nie po to żeby dziedziczenie wielobazowe miało
> taki sens jak normalne(relacja is-a) i wtedy chcesz
> przekazywać jeden obiekt jako is-a Animal i jako
> is-a Shape ;)?

Nie rozumiem. Nie chodzi o jakieś wygimnastykowane castowanie, tylko o
interfejs będący niejako "wtyczką", zamiast szablonem.



--
Azarien


Kosmetyki naturalne


From: Daniel Janus <przesunmalpe nathell.korpus.pl>
Subject: Re: operator =
Dnia 29.05.2007 Wiktor S. <SPAM.wswiktor poczta.SPAM.fm.SPAM> napisał/a:
>>>> Na co komu wielobazowe dziedziczenie w Object Pascal'u? :P
>>>
>>> Na to samo, co wszędzie. Interfejs niesie ze sobą nagłówki metod, ale
>>> czy jest mechanizm w Object Pascalu, niosący wraz z interfejsem
>>> również ich kod?
>>
>> A na co Tobie taki mechanizm? Podaj realny przykład ;).
>
> Jest klasa nadrzędna i kilka równoległych jej potomnych.
> Jest pewien zestaw metod, z których chcę, by:
>
> klasa nadrzędna ich nie miała,
> niektóre potomne miały niektóre z nich. ale nie wszystkie miały wszystkie,
> zbiór tylko częściowo się pokrywa.
> jednak jeśli TKlasaPotomna i TKlasaInnaPotomna mają metodę JakasMetoda, to
> jest to TA SAMA METODA.
> Aby nie powielać kodu, trzeba by:
>
> - zastosować wielokrotne dziedziczenie (ponieważ hierarchia klas musiałaby
> być SIECIĄ, a nie DRZEWEM)

Grafem dwudzielnym dokładnie ;)

> - zastosować interfejsy niosące kod, a nie tylko nagłówki.

A to nie de facto wielodziedziczenie?

W języku bez wielodziedziczenia zrobiłbym po prostu nadklasę implementującą
wszystkie możliwe metody (i w zależności od potrzeb jej podklasy, kiedy trzeba
gdzieś zmienić zachowanie), po czym udawał, że niektóre obiekty nie mają
niektórych metod. Moim zdaniem poniesiona w takim przypadku utrata statycznej
kontroli jest mniejszym kosztem, niż utrata czytelności kodu wymuszona przez
próbę narzucenia takich interfejsów.

--
Daniel 'Nathell' Janus, GG #1631668, przesunmalpe nathell.korpus.pl
create_initial_thread(initial_function);
lose("CATS. CATS ARE NICE.\n");
-- Steel Bank Common Lisp, sbcl/runtime/runtime.c:425


From: "Wiktor S." <SPAM.wswiktor poczta.SPAM.fm.SPAM>
Subject: Re: operator =
>> - zastosować interfejsy niosące kod, a nie tylko nagłówki.
>
> A to nie de facto wielodziedziczenie?

Jak zwał, tak zwał, ale w Pascalu tego nie ma :-)

> W języku bez wielodziedziczenia zrobiłbym po prostu nadklasę
> implementującą wszystkie możliwe metody (i w zależności od potrzeb
> jej podklasy, kiedy trzeba gdzieś zmienić zachowanie), po czym
> udawał, że niektóre obiekty nie mają niektórych metod.

Tak też zrobiłem, a "udawanie" że metody nie ma polegało na litanii

procedure foo; begin end;
procedure bar; begin end;
procedure baz; begin end;

itd.




--
Azarien


From: DarekM <darekm emadar.com>
Subject: Re: operator =
Wiktor S. napisał(a):
>>> - zastosować interfejsy niosące kod, a nie tylko nagłówki.
>>
>> A to nie de facto wielodziedziczenie?
>
> Jak zwał, tak zwał, ale w Pascalu tego nie ma :-)
>
>> W języku bez wielodziedziczenia zrobiłbym po prostu nadklasę
>> implementującą wszystkie możliwe metody (i w zależności od potrzeb
>> jej podklasy, kiedy trzeba gdzieś zmienić zachowanie), po czym
>> udawał, że niektóre obiekty nie mają niektórych metod.
>
> Tak też zrobiłem, a "udawanie" że metody nie ma polegało na litanii
>
> procedure foo; begin end;
> procedure bar; begin end;
> procedure baz; begin end;
>
> itd.
można jeszcze oznaczyć je jako abstrakcyjne, wtedy pewność że nie zostaną wywołane.

Darek


następna strona