Autor Téma: prvok triedy svojho typu  (Přečteno 241 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 784
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
prvok triedy svojho typu
« kdy: 17-09-2022, 12:12:55 »
Kód: Delphi [Vybrat]
  1. interface
  2.  
  3. uses
  4.   Classes;
  5.  
  6. type
  7.   TMyObject = class;
  8.  
  9.   TMyObject = class
  10.     Parametr1: string;
  11.     Parametr2: TStringList;
  12.     Parametr3: TMyObject;
  13.     constructor Create;
  14.     destructor Destroy;
  15.   end;
  16.  
  17. implementation
  18.  
  19. constructor TMyObject.Create;
  20. begin
  21.   Parametr2:= TStringList.create;
  22.   Parametr3:= TMyObject.create;
  23. end;
  24.  
  25. destructor TMyObject.Destroy;
  26. begin
  27.   Parametr2.Free;
  28.   Parametr3.Free;
  29. end;
  30.  
  31. end.

samozrejme pri vytvoreni objektu sa mi to zacykli?
ako to riesit?

otazka je vyustenim https://forum.delphi.cz/index.php/topic,17883.0.html
« Poslední změna: 17-09-2022, 12:21:55 od František »

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1402
  • Karma: 52
    • Verze Delphi: 10.3
Re:prvok triedy svojho typu
« Odpověď #1 kdy: 17-09-2022, 13:05:44 »
Tak určitě nevytvářet Parametr3 vždy :-)
Tj. třeba můžeš constructoru předat parametr, jestli si má Parametr3 vytvořit, nebo ne.
Nebo ho v constructoru nevytvářet vůbec a vytvořit si ho až někdy někde bude potřeba.

Offline František

  • Guru
  • *****
  • Příspěvků: 784
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:prvok triedy svojho typu
« Odpověď #2 kdy: 17-09-2022, 17:52:51 »
no to ma napadlo, ale reku ci neexistuje nejake ine riesenie

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6742
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:prvok triedy svojho typu
« Odpověď #3 kdy: 17-09-2022, 18:22:58 »
Neviem si predstaviť, kde by som vyžil/použil takú krkolomnú konštrukciu.
Ja by som si vytvoril dátovú triedu, kde by som mal prvé dve polia. A tú by som dal do TMyObject. Predpokladám, že takto by som tam nemusel mať ten Parametr3.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 784
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:prvok triedy svojho typu
« Odpověď #4 kdy: 17-09-2022, 18:42:08 »
to je pre stromovu strukturu

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1191
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:prvok triedy svojho typu
« Odpověď #5 kdy: 18-09-2022, 20:55:04 »
Nedává smysl dávat vytvoření podřízené úrovně do konstruktoru. Kolik těch úrovní chceš vytvořit - 10, 100 ... nekonečno?
Ano, můžeš si tam dát parametr, v které úrovni to zrovna je a pokud > 1000, tak dáš exit a už se ti to nezackylí :D
(to nic nemění na tom, že to je nesmysl a úroveň si vytváříš a v momentě, kdy to potřebuješ)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3448
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:prvok triedy svojho typu
« Odpověď #6 kdy: 19-09-2022, 11:18:23 »
to je pre stromovu strukturu
Me to taky nedava smysl: strom je vetsinou tvoren spojovymi seznamy uzlu a jestli to chapu dobre, tak tvuj TMyObject ma predstavovat uzel, ktery miva:

- odkaz na rodice
- odkaz na leveho sourozence
- odkaz na praveho sourozence

- odkaz na 1. potomka (head)
- odkaz na posledniho potomka (tail)
- pocet potomku

ev. jako kolekce uzlu pro vsechny deti napr. TList<TMyObject>, kdyz se nepozaduje nejake rychle traversovani stromem.

A vsechno jsou to odkazy, ktere se resi az po vytvoreni instance uzlu tj. napr. po Add/Insert/Delete

Offline František

  • Guru
  • *****
  • Příspěvků: 784
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:prvok triedy svojho typu
« Odpověď #7 kdy: 19-09-2022, 13:08:57 »
ospravedlnujem sa mam tam byt

Kód: Delphi [Vybrat]
  1. TMyObject = class(TObjectList)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3448
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:prvok triedy svojho typu
« Odpověď #8 kdy: 20-09-2022, 14:25:36 »
Kód: Delphi [Vybrat]
  1. TMyObject = class(TObjectList)

Ne, ze by mi to bylo ted jasnejsi :D Proc je uzel reprezentovan kolekci a jeste obsahuje dalsi kolekci uzlu, kdyz ve stromu ma uzel prave jednoho parenta tj. na vsechny deti musi stacit jedna kolekce  :o