Für TAuto und TMotorrad nutze ich diese Funktion dann folgendermaßen
Code:
function tanken():byte; reintroduce;
Vermutlich willst du
override
statt
reintroduce
. Sonst muss die Methode in der Basisklasse ja nicht als virtuell deklariert sein.
Für die Klasse TLkw möchte ich aber
Code:
function tanken(adblue:boolean):byte; reintroduce;
nutzen.
Wenn ich die Objekte einzeln erzeugen würde, könnte ich die Funktion auch problemlos nutzen
Code:
var golf:TAuto;
var laster:TLkw;
begin
golf := TAuto.create;
golf.tanken()
laster := TLkw.create;
laster.tanken(TRUE);
Da ich aber jetzt die Deklaration über
Code:
var fahrzeugpool : array[0..3] of TFahrzeug;
und
Code:
fahrzeugpool[0] := TAuto.create;
fahrzeugpool[1] := TLkw.create;
nutze, bekomme ich bei
Code:
adblue_tanken := TRUE;
fahrzeugpool[1].tanken(adblue_tanken);
ein Compilerfehler. (Too many actual parameters)
Ist ja auch klar, da in der
TFahrzeug Funktion
tanken() kein weiterer Parameter vorhanden ist.
Wie kann ich dennoch auf die tanken-Funktion vom LKW mit dem Parameter zugreifen?
Entweder casten:
TLkw(fahrzeugpool[1]).tanken(adblue_tanken);
Oder du nutzt eine Zwischen-Variable:
Delphi-Quellcode:
var
laster: TLkw;
begin
laster := TLkw.Create;
fahrzeugpool[1] := laster;
laster.tanken(True);
PS. habe jetzt alle Namen zur leichteren Lesbarkeit angepasst
Du wirst mir noch dankbar sein.