Standardparameter
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.