Einzelnen Beitrag anzeigen

hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

Verwirrung mit override/overload bei Constructoren

  Alt 13. Jun 2007, 14:42
Es ist zwar kein richtiges Problem (es läuft zwar) aber trotzdem ich bin bei folgendem Konstrukt nicht mehr wirklich sicher, was da passiert:
Delphi-Quellcode:
interface
type
TTextEditor= class(TMyForm)
  public
   constructor Create(AOwner : TComponent); overload; override; // <----- ES GEHT UM DIESE ZEILE
   constructor Create(AOwner : TComponent; lNEm : Boolean); reintroduce; overload;
end;

implementation
//----------------------------------------------------------------------------------------------------------------------
// Klasse erzeugen - Default konstruktor
//----------------------------------------------------------------------------------------------------------------------
constructor TTextEditor.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  lNotEmpty := False;
end;

//----------------------------------------------------------------------------------------------------------------------
// Klasse erzeugen - Konstruktor mit Parameter
//----------------------------------------------------------------------------------------------------------------------
constructor TTextEditor.Create(AOwner : TComponent; lNEm : Boolean);
begin
  inherited Create(AOwner); // <-- Welcher Konstruktor wird hier warum aufgerufen
  lNotEmpty   := lNEm;
  ActionCancel.Enabled := not lNotEmpty;
end;
In der obigen Form kompiliert Delphi ohne zu meckern.

Bei folgenden Varianten kommen entweder Warnungen (nicht schön, will ich weg haben) oder gar Fehler:

Variante 1:
Delphi-Quellcode:
   constructor Create(AOwner : TComponent); override; overload; // <----- ES GEHT UM DIESE ZEILE
   constructor Create(AOwner : TComponent; lNEm : Boolean); reintroduce; overload;
Fehler: Feldbezeichner nicht erlaubt nach Methoden oder Eigenschaften

Variante 2:
Delphi-Quellcode:
   constructor Create(AOwner : TComponent); overload; // <----- ES GEHT UM DIESE ZEILE
   constructor Create(AOwner : TComponent; lNEm : Boolean); reintroduce; overload;
Warnung: W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TFormPPS'

Wer klärt mich auf????
  Mit Zitat antworten Zitat