デフォルト パラメータ
Pascal コンパイラは現在、コンストラクタに関して C++ との互換性を保つために、デフォルト パラメータを許容します。 C++ とは異なり、Object Pascal のコンストラクタでは、同じ数、同じ型のパラメータを持つことができます。パラメータには一意に名前が付けられるからです。 そのような場合、C++ ヘッダー ファイルの生成時に Object Pascal コンストラクタでダミー パラメータが使用され、それらのコンストラクタが区別されます。 たとえば、TInCompatible という名前のクラス用に、次のような Object Pascal のコンストラクタがあるとします。
constructor Create(AOwner: TComponent) ;
constructor CreateNew(AOwner: TComponent) ;
デフォルト パラメータがなければ、これら 2 つのコンストラクタを C++ に変換した場合、次のように、コードにあいまいさが生じます。
__fastcall TInCompatible(Classes::TComponent* Owner);
// C++ version of the Pascal Create constructor
__fastcall TInCompatible(Classes::TComponent* Owner);
// C++ version of the Pascal CreateNew constructor
一方、デフォルト パラメータを使って、TCompatible というクラスの Object Pascal コンストラクタが次のようになっているとしましょう。
constructor Create(AOwner: TComponent) ;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0) ;
これらを C++Builder に変換した場合、次のように、コードにあいまいさは生じません。
__fastcall TCompatible(Classes::TComponent* Owner);
// C++ version of the Pascal Create constructor
__fastcall TCompatible(Classes::TComponent* Owner, int Dummy);
// C++ version of the Pascal CreateNew constructor
メモ: デフォルト パラメータに関する主な問題は、Delphi コンパイラ(DCC32)によりデフォルト パラメータのデフォルト値が削除されることです。デフォルト値を削除できなければ、デフォルトがまったくない場合に生じるあいまいさにつながります。RAD Studio ライブラリ クラスまたはサードパーティ製コンポーネントを使用するときは、このことに注意する必要があります。