Neporadím ti úplně konkrétně, protože to úplně nechápu... ale zkusil bych se podívat na přetížené (overloaded) funkce - nadefinuješ stejné fce (snad i třídy), s různými parametry a ono se to bude chovat podle toho jaké parametry k tomu dáš...
Neporadím ti úplně konkrétně, protože to úplně nechápu... ale zkusil bych se podívat na přetížené (overloaded) funkce - nadefinuješ stejné fce (snad i třídy), s různými parametry a ono se to bude chovat podle toho jaké parametry k tomu dáš...
pomoci dedicnosti to muzes udelat tak, ze budes mit tridu TPrvek, ktera bude mit atribut Naslednik typu TPrvek. Trida TSeznam bude obsahovat atribut Prvni: TPrvek.
Data zajistis treba tak, ze z tridy TPrvek "zdedis" sve tridy, ktere budou obsahovat jeste atributy pro tva data, libovolnych typu.
Do seznamu pak bude pomoci metody "add" pridavat vzdy na konec (projdes si cyklem / rekurzi seznam od Prvni pres atributy Naslednik cely seznam az na konec) prvek, ktery bude instanci tve tridy rozsirujici TPrvek, ale pretypovane na TPrvek..cili pro seznam se bude tva trida tvarit jako TPrvek, bude mit atribut Naslednik. Pro tve potreby bude obsahovat data dle libosti (pro pouziti zase pretypujes zpet).
Nebo muzes mit TPrvek, ktery bude obsahovat atribut Naslednik: TPrvek a atribut Data: TPrvekData. Pak si vytvoris tridu TMojeData, ktera bude rozsirovat TPrvekData a bude obsahovat atributy pro tva data. Do seznamu budes na konec pridavat instanci TPrvek, kde atribut Data bude odkazovat na instanci tridy TMojeData a podobne..
A urcite jsou dalsi zpusoby![]()
Naposledy upravil Anduril; 12.03.2008 v 23:18.
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
2 Anduril: Tak toto se jeví jako jednodušší myšlenkaJen pro upresneni to ma byt seznam cyklicky s hlavou a mame implementovat metody pro vkládání na konec a za aktualni prvek, ale to na situaci moc nemění. Snad to dám do kupy, díky.
NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...
Jj, tak to uz je jedno jak to mezi sebou vnitrne propojis, na myslence to nic nemeni![]()
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
Tak už jsem narazil. Mám v Třídě TSingleList tyto metody:
constructor Vytvor(Hlava:TPrvek); Virtual;
procedure Zrus(Parametr:Boolean);
function JePrazdny:Boolean;
function ZpristupniPrvni:TPrvek;
procedure VlozPrvni(Prvni:TPrvek);
procedure OdeberPrvni;
procedure VlozNaslednika(Dalsi:TPrvek);
procedure OdeberNaslednika;
procedure SetAktualni(Prvek:TPrvek);
function GetAktualni:TPrvek;
Vetšina z nich má parametr typu TPrvek. Jenze já vytvářím objekty z třídy dědící po TPrvek, dejme tomu TPotomek1,TPotomek2 a TPotomek3. Z toho plyne že bych musel každou metodu s parametrem typu Tprvek přetížit 3x. Neexistuje jednodušší řešení?
BTW: Jak bych přetížil třeba tuto funkci?
function TSingleList.ZpristupniPrvni:TPrvek;
begin
ZpristupniPrvni:=FHlava.ZpristupniNaslednika;
end;
To asi nejde ne? Bych ji musel vlozit do třídy TPotomek a dat ji typ prislusneho potomka.
Neztracíte se v tom? Ja jo![]()
NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...
Nevim jak v Delphi (treba to neumi? nevim), ale imho by melo stacit, jak jsem psal, pri vkladani prvku tento pretypovat na TPrvek. Jelikoz tve tridy dedi z TPrvek a seznam pouziva pouze tridu TPrvek, pak by to melo stacit...
Ten seznam by mel byt obecny, nevazat se na konkretni tridy, pouze na TPrvek. Nepotrebujes v nem pracovat s daty, takze tridy TPotomek1 a pod te vubec nezajimaji. Kdyz ze seznamu pak TPrvek dostanes, pretypujes si ho zpet na TPotomekX.
Naposledy upravil Anduril; 13.03.2008 v 07:36.
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
Stejne jako v jinych objektove orientovanych jazycich se nemusi nic pretypovavat - resp. udela se tam implicitni pretypovani.
Napr:
v kodu pak muzes napsat toto:Kód:TPrvek = class procedure Zpracuj(co: TPrvek); end; TDalsiPrvek = class (TPrvek) end; TDalsi2Prvek = class (TPrvek) end;
Kód:var prvek: TPrvek; dalsiPrvek: TDalsiPrvek; dalsi2Prvek: TDalsi2Prvek; begin prvek = TPrvek.Create(); dalsiPrvek = TDalsiPrvek.Create(); dalsi2Prvek = TDalsi2Prvek.Create(); prvek.Zpracuj(dalsiPrvek); prvek.Zpracuj(dalsi2Prvek); end;
GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
Blog
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]
Jo, mas pravdu..smerem na TPrvek to pujde samo, ale zpet (z TPrvek na vlastni tridu) imho ne, tam to bude treba pretypovat.
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
Jj, je to tak. Jsem zapomněl vytvořit seznam, tak mě to házelo chybu na řádku kde jsem vkládal do metody parametr jiného typu a já myslel že je to tím...
NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...
Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)