gpt4 book ai didi

delphi - 即使子类定义了抽象函数,为什么我也会收到抽象错误?

转载 作者:行者123 更新时间:2023-12-02 03:02:21 27 4
gpt4 key购买 nike

我有一个带有抽象方法getID的类Packet:

Type
Packet = class
...
function getID() : Integer;virtual;abstract;
class procedure writePacket(par0 : Packet; par1 : TIdTCPConnection);
...
implementation

class procedure Packet.writePacket(par0 : Packet; par1 : TIdTCPConnection);
// par1 is a TCP connection used to send data through the network;
begin
par1.writeInteger(par0.getID());
//some code following
end;

我有以下子类:

type
PacketTest = class(Packet)
...
function getID() : Integer;
...

function PacketTest.getID():Integer;
begin
result := {some value individual for each subclass}
end;

现在,我调用父类(super class)的类过程 writePacket,并将 packet 的子类称为 par0,然后它应该调用子类的函数 getID。相反,它调用父类(super class)的函数 getID 并(当然)抛出一个抽象错误。

我希望它动态调用子类的函数getID,这永远不会导致问题,因为par0始终是Packet的子类,因为Packet本身是抽象的。

最佳答案

子类中getID的声明必须有override关键字:

type
PacketTest = class(Packet)
function getID: Integer; override;
end;

function PacketTest.getID: Integer;
begin
Result := {some value individual for each subclass}
end;

关于delphi - 即使子类定义了抽象函数,为什么我也会收到抽象错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com