我正在将一些 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*s 和东西的 C++ 函数,C++ 代码可以调用采用 Delphi Things 等的 Delphi 函数。所以基本上,如果进行了上述转换,C++ Thing2* 是否等于一个 Delphi Thing2,Delphi 可以在其中调用它的方法等?
最佳答案
不完全是。在 C++ 中,将方法标记为 = 0
表示它是一个抽象方法。在 Delphi 中,要获得相同的效果,您必须将其标记为 virtual; abstract;
,不仅仅是virtual;
。
此外,在 Delphi 中,如果您将类成员声明紧跟在类名下,默认情况下它将被声明为 published
,这意味着它是公共(public)的,并且会为其生成 RTTI。这可能不是您的本意,因此请先声明可见性范围(private、protected
或 public
):
Thing = class
public
procedure blah; virtual; abstract;
end;
Thing2 = class(Thing)
public
function asdf(Thing) : Boolean; virtual; abstract;
end;
关于c++ - 将 C++ 类转换为 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415082/