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
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
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
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