Standardparameter

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Unterstützung für Delphi-Datentypen und Sprachkonzepte


Der Pascal-Compiler akzeptiert jetzt aus Kompatibilitätsgründen mit C++Konstruktoren Standardparameter. Im Gegensatz zu C++ dürfen Object Pascal-Konstruktoren dieselbe Anzahl und Typen von Parametern haben, solange sie unterschiedliche Namen besitzen. In solchen Fällen werden beim Erzeugen der C++-Header-Dateien in den Object Pascal-Konstruktoren zur Unterscheidung Dummy-Parameter verwendet. Für eine Klasse namens TInCompatible könnten die Object Pascal-Konstruktoren beispielsweise folgendermaßen aussehen:

 constructor  Create(AOwner: TComponent) ; 
 constructor  CreateNew(AOwner: TComponent) ;

Ohne die Standardparameter ergäbe sich in C++ für beide Konstruktoren der folgende, mehrdeutige Code:

 __fastcall  TInCompatible(Classes::TComponent* Owner);
 // C++-Version des Pascal-Konstruktors Create 
 __fastcall  TInCompatible(Classes::TComponent* Owner);
 // C++-Version des Pascal-Konstruktors CreateNew

Für eine Klasse namens TCompatible mit Standardparametern lauten die Object Pascal-Konstruktoren jedoch folgendermaßen:

constructor  Create(AOwner: TComponent) ; 
constructor  CreateNew(AOwner: TComponent; Dummy: Integer = 0) ; 

Dies ergibt in C++Builder den folgenden eindeutigen Code:

 __fastcall  TCompatible(Classes::TComponent* Owner);
 // C++-Version des Pascal-Konstruktors Create 
 __fastcall  TCompatible(Classes::TComponent* Owner, int Dummy); 
// C++-Version des Pascal-Konstruktors CreateNew

Hinweis: Das Hauptproblem bei Standardparametern ist, dass der Delphi-Compiler (DCC32) den Standardwert des Standardparameters entfernt. Fehler beim Entfernen des Standardwertes führen zu derselben Mehrdeutigkeit, die ohne Standardwerte vorhanden wäre. Bedenken Sie dies bei der Verwendung von VCL-Klassen oder Komponenten von Fremdherstellern.

Siehe auch