Kurze Grundlagen zu Klassen:
Klassen sind erstmal Typen und bekommen vor dem Namen ein
T
verpasst.
Der
constructor
heißt
Create
und sollte nach Möglichkeit auch so benutzt/benannt werden.
Delphi-Quellcode:
TMyObj = class
public
constructor Create;
constructor Init;
end;
constructor TMyObj.Create;
begin
inherited;
// irgendwas machen
end;
constructor TMyObj.Init;
begin
inherited Create;
// irgendwas machen
end;
Wird eine Klassen-Instanz erzeugt (mit dem
constructor
) so liefert mir selbiger eine
Referenz auf die Klasse (als einen
Zeiger).
Ein Zeiger auf eine Klassen-Referenz-Variable liefert mir also nur den Zeiger auf den Zeiger der Klasse. Lustig, gell?
(Das hört sich nicht nur komisch an, es ist auch komisch)
Für die Verwaltung von Klassen-Instanzen (man spricht dabei von Objekten), also eine Liste mit Objekten, gibt es die
TObjectList.
Delphi-Quellcode:
var
MyList : TObjectList;
begin
// Liste erzeugen ...
MyList := TObjectList.Create( True );
try
// ... mit ein paar Objekten füllen ...
MyList.Add( TMyObj.Create );
MyList.Add( TMyObj.Create );
MyList.Add( TMyObj.Create );
finally
// und wieder freigeben
MyList.Free;
end;
end;
Das gibt auch kein Speicherleck, da
TObjectList.Create( True )
eine Liste erzeugt, die alle Objekte der Liste automatisch freigibt.
Somit solltest du deinen Ansatz mit dem ganzen Zeigergeraffel grundlegend über Bord werfen.
Zu deiner Klasse selber
Delphi-Quellcode:
TFahrtRichtung = ( frRunter, frHoch );
//FahrstuhlKabine = class
TFahrstuhlKabine = class
// diese Felder sind alle published ... eher unvorteilhaft
// Der Zugriff sollte über Properties geregelt werden
F_id: cardinal;
//fahrtrichtung: bool; // 1 = hoch // 0 = runter
Fahrtrichtung : TFahrtRichtung;
In_Benutzung: bool;
Fahrtzeit: real;
gewaehlteEtagen: pgewEt;
speed: real;
EtageV, EtageB, zulGewicht: integer;
niAnEt: pNiAnEt;
private
F_position, F_tatsGewicht: real;
public
testvar:integer;
property id: cardinal read F_id write F_id;
property position:real read F_position write F_position;
property tatsGewicht:real read F_tatsGewicht write F_tatsGewicht;
constructor init(id_in:cardinal; zulGewicht_in, EtageV_in, EtageB_in: integer; sNiAnEt: string);
// !!! NEIN !!!
// destructor destruct();
destructor Destroy; override;
function zielAnfahren(Ziel:integer):bool;
procedure set_Zieletage();
procedure Notruf();
function lastprobe():bool;
function geschwindigkeitsmessung():bool;
procedure notfallbremsen();
function test():integer;
end;