I am translating some C++ code to Delphi and there are some abstract classes that need to be translated. These classes are used as parameter/return types, etc, and my question is if a C++ class hierarchy such as this:
class Thing {
virtual void blah() = 0;
};
class Thing2 : public Thing {
virtual bool asdf(Thing*) = 0;
};
can be rewritten in Delphi as:
Thing = class
procedure blah; virtual;
end;
Thing2 = class(Thing)
function asdf(Thing) : Boolean; virtual;
end;
And the Delphi code can call C++ functions that take C++ Thing*s and stuff, and C++ code can call Delphi functions that take Delphi Things, etc. So basically, if the above translation is made, will a C++ Thing2* equal a Delphi Thing2 where Delphi can call it's methods, etc?
Not quite. In C++, marking a method as = 0 means it's an abstract method. In Delphi, to get the same effect, you have to mark it as virtual; abstract;, not just as virtual;.
Also, in Delphi, if you place a class member declaration immediately under the class name, it'll be declared by default as published, which means it's public plus RTTI is generated for it. That's probably not your intention, so put a visibility scope declaration (private, protected or public) first:
Thing = class
public
procedure blah; virtual; abstract;
end;
Thing2 = class(Thing)
public
function asdf(Thing) : Boolean; virtual; abstract;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With