0

別のクラスから継承するクラスを作成する場合、派生クラスが作成されるときに基本クラスのコンストラクターが呼び出されるというのは本当ではないでしょうか。

Type
  TBase = Class
    constructor xMain;
  End;
  TDerived  = Class(TBase)
    constructor xMain;
  End;

constructor TBase.xMain;
begin
  MessageBox(0,'TBase','TBase',0);
end;

constructor TDerived.xMain;
begin
  MessageBox(0,'TDerived','TDerived',0);
end;


Var
  xTClass:TDerived;
begin
  xTClass := TDerived.xMain;
end.

これにより、MessageBoxに「TBase」と「TDerived」の順に表示されるはずだと思いました。しかし、そうではありません。上記のコードを実行すると、「TDerived」が表示されるメッセージボックスが1つだけ表示されます。

4

2 に答える 2

9
constructor TDerived.xMain;
begin
  inherited;
  MessageBox(0,'TDerived','TDerived',0);
end;
于 2012-11-11T10:26:16.023 に答える
6

TDerived.xMainに継承されたものを追加します。そうしないと、祖先からのコードは呼び出されません。

begin
  inherited;//call the ancestor TBase.xMain
  MessageBox(0,'TDerived','TDerived',0);
end;

また、この質問は、継承された予約語を理解するのに役立ちます。

Delphi:仮想メソッドで継承された継承された祖先を呼び出す方法は?

もう1つの優れたリソースは、http://www.delphibasics.co.uk/RTL.asp?Name= AliExpressです。

于 2012-11-11T10:31:13.650 に答える