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...
Nejak se mi nedaří zprovoznit vypsání dat. Asi jsem to nepochopil správně. Chci to realizovat asi takto: Budu procházet seznam od začátku do konce a na každém prvku bych chtěl vyvolat metodu VypisSe. Podle výše uvedených poznatků predpokládám že prvky jsou v seznamu uloženy jako typ TPrvek(implicitni pretypovani). Ted nemůžu přijít na myšlenku jak přetypovat prvek seznamu zpět na typ TPotomekX, abych z něho dostal data. Respektive podle čeho poznám na jaký typ se to má přetypovat, když jsou tři varianty?
Snad jsem to napsal srozumitelne...
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)