Hallo,
Zu Problem 1:
Im Button-Click fragst du die Radio-Group ab. Je nachdem erstellst du eine Instanz der gewünschten Klasse und fügst diese zu deiner Menschenliste hinzu.
In diesem Schritt musst du natürlich explizit auf die Felder der abgeleiteten Klassen zugreifen.
Zu Problem 2:
Es ist doch egal wie viele Werte die einzelnen Objekte in der Menschenliste haben. Da in der Liste ja nicht die kompletten Objekte sondern jeweils nur Pointer (4 bzw. 8 Byte groß) auf die Objekte gespeichert werden hat das überhaupt keine Auswirkung auf die Liste selbst.
Edit: Oder was wahrscheinlich noch besser wäre wäre eine Funktion in der Art wie Mikkey es vorgeschlagen hat, die dafür sorgt dass über eine virtuelle Methode das Objekt selbst dafür sorgt wie es z.B. ausgegeben wird (wäre vor allem für Problem 3 sehr praktisch)
Zu Problem 3:
In diesem Fall würdest du die Menschenliste mit einer Schleife durchlaufen und nur die Objekte in irgendeiner Weise darstellen/anzeigen die von der Klasse TArbeiter abgeleitet sind:
Delphi-Quellcode:
for i:= 0 to Menschenliste.Count-1 do
begin
if Menschenliste[i] is TArbeiter then
DisplayMensch(Menschenliste[i]);
end;
// oder besser:
for i:= 0 to Menschenliste.Count-1 do
begin
if Menschenliste[i] is TArbeiter then
Menschenliste[i].Display(AnzeigePanel); // o.ä.
end;
Generelles:
Wenn du auf Objekte in der Liste zugreifst kannst du erstmal nur auf die Felder zugreifen die in TMensch deklariert wurden. Möchtest du Felder abgeleiteter Klassen lesen/schreiben musst du vorher prüfen von welcher Klasse das Objekt abgeleitet ist (s.o.) und danach das Objekt casten.
Delphi-Quellcode:
var arbeiter: TArbeiter;
begin
if Menschenliste[0] is TArbeiter then
begin
arbeiter := TArbeiter(Menschenliste[0]);
arbeiter.Stundenlohn := 15.0;
end;
end;
Ich bin mir aber auch generell nicht ganz sicher was du mit deinen Fragen meinst. Aber ich glaube du denkst z.T. falsch bzw. zu kompliziert.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."