Delphi中如何在子类中重写父类中定义的虚函数,实现参数差异化调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计711个文字,预计阅读时间需要3分钟。
我想要在一个基类中定义一个虚拟的例子,然后在派生类中实现。问题是由于参数不同,不允许覆盖该过程。Delphi的类模型有什么解决方案,还是我的方法完全错了?
在Delphi中,如果你想要在基类中定义一个虚拟的方法(也称为虚函数),然后在派生类中根据不同的参数实现它,你需要确保基类中的方法声明是虚拟的,并且派生类中的方法能够正确覆盖基类的方法。
以下是一个简化的示例,说明如何正确实现这一过程:
delphitype // 基类定义 TBase=class public // 虚拟方法声明 procedure VirtualMethod(AValue: Integer); end;
// 派生类定义 TDerived=class(TBase) public // 覆盖基类的方法 override procedure VirtualMethod(AValue: Integer); override; end;
// 基类的方法实现procedure TBase.VirtualMethod(AValue: Integer);begin // 基类中实现的代码 WriteLn('Base class method with value: ', AValue);end;
// 派生类的方法实现procedure TDerived.VirtualMethod(AValue: Integer);begin // 派生类中实现的代码 WriteLn('Derived class method with value: ', AValue);end;
在这个例子中,`TBase` 类定义了一个虚拟方法 `VirtualMethod`,它在派生类 `TDerived` 中被覆盖。注意,`VirtualMethod` 在基类中的声明前有一个 `virtual` 关键字,这表示这个方法是虚拟的,可以在派生类中被覆盖。
如果Delphi编译器报告错误,可能是因为以下原因:
1. 方法没有正确声明为虚拟。
2.派生类中的方法没有使用 `override` 关键字来明确表示它覆盖了基类的方法。
3.方法签名(参数列表和返回类型)在基类和派生类中不完全相同。
确保你的方法声明和实现遵循上述规则,如果仍然存在问题,可能需要检查具体的代码细节来确定错误的原因。
我想要一个复制在基类中定义为虚拟的例程,稍后在派生类中实现.
问题是由于参数不同,不允许覆盖该过程.
Delphi的类模型有什么解决方案,还是我的方法完全错了?
type TCar = class procedure CopyFrom(c: TCar); virtual; end; TChrysler = class(TCar) FColor: Integer; procedure CopyFrom(c: TChrysler); override; end; procedure TCar.CopyFrom(c: TCar); begin //virtual end; procedure TChrysler.CopyFrom(c: TCrysler); begin FColor := c.FColor; end; var Car1, Car2: TCar; begin Car1 := TChrysler.Create; Car2 := TChrysler.Create; Car2.CopyFrom(Car1); //TChrysler.CopyFrom should be called. end; 您需要保持参数列表相同,只需在实现内部进行类型检查:
type TCar = class procedure CopyFrom(c: TCar); virtual; end; TChrysler = class(TCar) FColor: Integer; procedure CopyFrom(c: TCar); override; end; procedure TCar.CopyFrom(c: TCar); begin //virtual end; procedure TChrysler.CopyFrom(c: TCar); begin if c is TCrysler then FColor := TCrysler(c).FColor; inherited; end;
本文共计711个文字,预计阅读时间需要3分钟。
我想要在一个基类中定义一个虚拟的例子,然后在派生类中实现。问题是由于参数不同,不允许覆盖该过程。Delphi的类模型有什么解决方案,还是我的方法完全错了?
在Delphi中,如果你想要在基类中定义一个虚拟的方法(也称为虚函数),然后在派生类中根据不同的参数实现它,你需要确保基类中的方法声明是虚拟的,并且派生类中的方法能够正确覆盖基类的方法。
以下是一个简化的示例,说明如何正确实现这一过程:
delphitype // 基类定义 TBase=class public // 虚拟方法声明 procedure VirtualMethod(AValue: Integer); end;
// 派生类定义 TDerived=class(TBase) public // 覆盖基类的方法 override procedure VirtualMethod(AValue: Integer); override; end;
// 基类的方法实现procedure TBase.VirtualMethod(AValue: Integer);begin // 基类中实现的代码 WriteLn('Base class method with value: ', AValue);end;
// 派生类的方法实现procedure TDerived.VirtualMethod(AValue: Integer);begin // 派生类中实现的代码 WriteLn('Derived class method with value: ', AValue);end;
在这个例子中,`TBase` 类定义了一个虚拟方法 `VirtualMethod`,它在派生类 `TDerived` 中被覆盖。注意,`VirtualMethod` 在基类中的声明前有一个 `virtual` 关键字,这表示这个方法是虚拟的,可以在派生类中被覆盖。
如果Delphi编译器报告错误,可能是因为以下原因:
1. 方法没有正确声明为虚拟。
2.派生类中的方法没有使用 `override` 关键字来明确表示它覆盖了基类的方法。
3.方法签名(参数列表和返回类型)在基类和派生类中不完全相同。
确保你的方法声明和实现遵循上述规则,如果仍然存在问题,可能需要检查具体的代码细节来确定错误的原因。
我想要一个复制在基类中定义为虚拟的例程,稍后在派生类中实现.
问题是由于参数不同,不允许覆盖该过程.
Delphi的类模型有什么解决方案,还是我的方法完全错了?
type TCar = class procedure CopyFrom(c: TCar); virtual; end; TChrysler = class(TCar) FColor: Integer; procedure CopyFrom(c: TChrysler); override; end; procedure TCar.CopyFrom(c: TCar); begin //virtual end; procedure TChrysler.CopyFrom(c: TCrysler); begin FColor := c.FColor; end; var Car1, Car2: TCar; begin Car1 := TChrysler.Create; Car2 := TChrysler.Create; Car2.CopyFrom(Car1); //TChrysler.CopyFrom should be called. end; 您需要保持参数列表相同,只需在实现内部进行类型检查:
type TCar = class procedure CopyFrom(c: TCar); virtual; end; TChrysler = class(TCar) FColor: Integer; procedure CopyFrom(c: TCar); override; end; procedure TCar.CopyFrom(c: TCar); begin //virtual end; procedure TChrysler.CopyFrom(c: TCar); begin if c is TCrysler then FColor := TCrysler(c).FColor; inherited; end;

