子クラスがある場合、子クラスは親からすべてのメソッドを継承しますが、親クラスの子クラスの関数を使用するにはどうすればよいですか?それは抽象化であるか?私はそれをどのように達成するのですか?Delphiの抽象化
マイコード:
type
cParent = class(TObject)
private
function ParentFunction:byte;
function ChildFunction:byte;virtual;abstract;
end;
type
cChild = class(cParent)
private function ChildFunction:byte;override;
end;
function cChild.ChildFunction:byte;
begin
Exit(20);
end;
function cParent.ParentFunction:byte;
begin
Exit(10);
end;
var
c:cParent;
begin
c:= cParent.Create;
WriteLn(c.ChildFunction);
Readln;
end.
これは、ファイルをコンパイルしますが、私は抽象化の例外を取得します。
コンパイルが正常に実行されたとすると、コンパイラから抽象クラスをインスタンス化しているという警告が表示されませんでしたか?エラーだけではなく、コンパイラのヒントや警告をスタンピングすることについてもっと勤勉にする必要があります。 –
従来のスタイルに関するちょっとしたコメント。 Delphiでは、クラス(および他の型)の名前の先頭にTを付けます。 関数の戻り値は、通常Exitを使用するのではなく、Exit(Result)= 10でなくExit(10);を使用して暗黙のResult変数を値に設定することによって設定されます。 Exit構文はD2009にのみ追加されました 注:結果(ParentFunction:= 10;)ではなく関数名を使用することもできます - エフェクトは同じで、オリジナルのパスカル構文です –