В C ++ нет ключевого слова overload
и оно не нужно. Просто определите ваши перегрузки по мере необходимости, компилятор достаточно умен, чтобы обнаружить перегрузки с тем же именем.
Когда вы создаете новую TForm в C ++ Builder, IDE уже предоставляет вам конструктор, совместимый с Application->CreateForm()
, например:
class TMainForm : public TForm
{
...
public:
__fastcall TMainForm(TComponent *Owner);
};
Вы можете, конечно, определить дополнительные перегруженные конструкторы, например:
class TMainForm : public TForm
{
...
public:
__fastcall TMainForm(TComponent *Owner);
__fastcall TMainForm(String name);
};
Просто обратите внимание, что CreateForm()
не сможет вызывать перегруженные конструкторы, кроме конструктора TComponent*
по умолчанию. С другой стороны, вы не должны использовать CreateForm()
для создания каких-либо объектов TForm , кроме Application->MainForm
. Вместо этого используйте оператор new
для непосредственного вызова нужного конструктора, например:
TMainForm *form = new TMainForm("My name here");
То же самое относится и к Delphi. Вызывайте CreateForm()
только для MainForm
и при необходимости вызывайте другие конструкторы. На самом деле, в Delphi вам, как правило, вообще не нужно overload
конструкторов, вы можете просто определить дополнительные конструкторы, используя разные имена, например:
TMainForm = class(TForm)
...
public
constructor Create(Owner: TComponent); override;
constructor CreateWithName(name: string);
end;
var
form: TMainForm;
...
form := TMainForm.CreateWithName('My name here');
Вы не можете сделать это в C ++, поскольку все конструкторы ДОЛЖНЫ иметь то же имя, что и тип класса.
Если вы обнаружите, что вышеперечисленное не работает для вас в C ++, тогда вообще не перегружайте конструктор. Вместо этого используйте метод статического класса, например:
class TMainForm : public TForm
{
...
public:
__fastcall TMainForm(TComponent *Owner);
static TMainForm* __fastcall Create(String name)
{
TMainForm *form = new TMainForm(NULL);
form->Name = name;
return form;
}
};
...
TMainForm *form = TMainForm::Create("My name here");