我正在将一些C ++代码翻译成Delphi,并且有一些需要翻译的抽象类。这些类用作参数/返回类型等,我的问题是如果是C ++类层次结构,如:
class Thing {
virtual void blah() = 0;
};
class Thing2 : public Thing {
virtual bool asdf(Thing*) = 0;
};
可以在Delphi中重写为:
Thing = class
procedure blah; virtual;
end;
Thing2 = class(Thing)
function asdf(Thing) : Boolean; virtual;
end;
Delphi代码可以调用带有C ++ Thing *和C ++的C ++函数,而C ++代码可以调用带Delphi Things等的Delphi函数。所以基本上,如果进行上述翻译,C ++ Thing2 *会等于Delphi Thing2 Delphi可以调用它的方法等吗?
答案 0 :(得分:2)
不完全。在C ++中,将方法标记为= 0
意味着它是一种抽象方法。在Delphi中,为了获得相同的效果,您必须将其标记为virtual; abstract;
,而不仅仅是virtual;
。
此外,在Delphi中,如果您在类名称下面立即放置一个类成员声明,它将默认声明为published
,这意味着它是公共的,并且为它生成了RTTI。这可能不是您的意图,所以首先放置一个可见范围声明(private, protected
或public
):
Thing = class
public
procedure blah; virtual; abstract;
end;
Thing2 = class(Thing)
public
function asdf(Thing) : Boolean; virtual; abstract;
end;