Autor Beitrag
Nait
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 17.09.10 10:30 
Hallo Leute,

ich habe drei voneinander abgeleitete Klassen, die jeweils zwei Init-Prozeduren mit overload besitzen. Das ganze sieht vereinfacht so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TSFE = class(TImage);
    public
      procedure Init(APfad: String); overload;
      procedure Init(AListe: TImageList; AListenIndex: Byte); overload;
  end;{class.TSFE}
  TObj = class(TSFE);
    public
      procedure Init(APfad: String; AArt: Byte); overload;
      procedure Init(AListe: TImageList; AListenIndex, AArt: Byte;); overload;
  end;{class.TObj}
  TMovObj = class(TObj);
    public
      procedure Init(APfad: String; AArt, AFrame: Byte); overload;
      procedure Init(AListe: TImageList; AListenIndex, AArt: Byte, AFrame: Byte); overload;
  end;{class.TMovObj}

Über inherited rufe ich ja in einer Methode diesselbe des Vorfahren auf. Nur weil ich jetzt da überall das overload drinne hab, hat zB TObj die Init-Prozeduren von TSFE nicht überschrieben, womit man theoretisch (und nach Compilierung) von TMovObj aus die Methode von TSFE aufrufen könnte. Das will ich nicht. In Quelltext:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMovObj.Init(APfad: String; AArt, AFrame: Byte);
begin
  inherited Init(APfad, AArt); //gut, soll so sein
  inherited Init(APfad); //doof, wie krieg ich das weg?
end;{procedure.TMovObj.Init}


Meine Frage wäre also, wie man die Möglichkeit des ungewünschten Aufrufs unterbinden kann. Ich hätte eine Lösung, wenn ich einen (bzw. zwei) optimalen Parameter in die Inits einbauen könnte: hinten dran die beiden List-Parameter und APfad würde in dem Falle leer sein. Aber ich weiß nicht, wie man optionale Parameter einbaut :(

EDIT: Hab nach delphi-Hilfe noch virtual in TSFE an und reintroduce in TObj & TMovObj vor overload gesetzt, aber es hat nichts geändert :(
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 19.09.10 13:00 
Reintroduce brauchst Du für normale Fälle gar nicht. Das Virtual in der Basisklasse sollte i.d.R. vollkommen ausreichen. In den Abgeleiteten Klassen muss noch ein override mit rein.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 19.09.10 13:53 
user profile iconNait hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich weiß nicht, wie man optionale Parameter einbaut :(
ausblenden Delphi-Quelltext
1:
2:
      procedure Init(APfad: String; AArt: Byte = 100; AFrame: Byte = 0); overload;
      procedure Init(AListe: TImageList; AListenIndex, AArt: Byte = 100, AFrame: Byte = 0); overload;

Für diesen Beitrag haben gedankt: Nait
Nait Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 19.09.10 21:36 
Das mit den ganzen Zusätzen ist noch etwas verwirrend...

Das war meine Alternativ-Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
      // PP: Per Path; PL: Per List
      procedure InitPP(APfad: String; AArt, AFrame: Byte); 
      procedure InitPL(AListe: TImageList; AListenIndex, AArt, AFrame: Byte);


user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNait hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich weiß nicht, wie man optionale Parameter einbaut :(
ausblenden Delphi-Quelltext
1:
2:
      procedure Init(APfad: String; AArt: Byte = 100; AFrame: Byte = 0); overload;
      procedure Init(AListe: TImageList; AListenIndex, AArt: Byte = 100, AFrame: Byte = 0); overload;
DANKE! Das hab ich gebraucht! (Irgendwie mochten die SuFus meine Eingabewörter nicht <__<)
Nun sieht es so aus:
ausblenden Delphi-Quelltext
1:
2:
    constructor Create(AOwner: TWinControl; ABildPos: TPoint; AArt: Byte;
      APathOrName: string; QuellGIL: TGameImageList = nil); reintroduce;

(Ja, ich habe inzwischen (wieder) zu den Konstruktoren gefunden und ja, TGameImageList ist ein eigener Typ)

Nochmal danke für die Hilfe!