[Delphi] Overloaden van constructor

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 08:51

Tomatoman

Fulltime prutser

Topicstarter
Voor een class heb ik drie constructors die overloaded zijn:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
type
  TMijnForm = class(TForm)
    FParams: TParams;
    FHelpKeyword: string;
    FHelpContext: string;
  public
    constructor CreateNew(Params: TMijnParams);
      reintroduce; overload; virtual;
    constructor CreateNew(Params: TMijnParams;
      const HelpKeyword: string); reintroduce; overload; virtual;
    constructor CreateNew(Params: TMijnParams;
      HelpContext: Integer); reintroduce; overload; virtual;
  end;

Nu moet ik de constructors implementeren. Het gemakkelijkste is het als de tweede en derde constructor de eerste constructor aanroepen:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
constructor TMijnForm.CreateNew(Params: TMijnParams);
begin
  inherited Create(Application);
  FParams := Params;
end;

constructor TMijnForm.CreateNew(Params: TMijnParams;
  const HelpKeyword: string);
begin
  Create(Params);
  FHelpKeyword := HelpKeyword;
end;

constructor TMijnForm.CreateNew(Params: TMijnParams;
  HelpContext: Integer);
begin
  Create(Params);
  FHelpContext := HelpContext;
end;

De ene constructor roept dus de andere aan. Het compileert prima, maar mijn vraag is: is deze constructie correct? Krijg ik niet ongewild twee instanties van TMijnForm of andere rare effecten?

Een goede grap mag vrienden kosten.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:50

Creepy

Tactical Espionage Splatterer

Eehh.. ik zie in je 2de en 3de constructors dat je Create aanroept en niet je eerste createnew. Tikfout?

Ik denk overigens niet dat je constructie twee instanties maakt, zolang je in de constructor die je intern zelf weer aanroept de enige is met de inherited aanroep van create. Waarom roep je overigens niet inherited createnew aan? (aangezien al je createnew functions reintroduce hebben)

[ Voor 16% gewijzigd door Creepy op 14-01-2003 13:24 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nee, dit kan en is correct. Een andere oplossing zou het gebruik van default parameters zijn. Dan heb je er niet eens 3 overloaded nodig.
Delphi:
1
constructor CreateNew(const Params: TMijnParams; const HelpKeyword: String = ''; HelpContext: Integer = 0); reintroduce;


Aannemende dat je CreateNew(...) bedoelt in de onderste twee ipv Create

[ Voor 14% gewijzigd door LordLarry op 14-01-2003 13:26 ]

We adore chaos because we like to restore order - M.C. Escher


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 08:51

Tomatoman

Fulltime prutser

Topicstarter
Inderdaad, ik bedoelde CreateNew :D. Typfoutje. Bedankt, de antwoorden zijn duidelijk.

Een goede grap mag vrienden kosten.