2010-12-11 4 views
3

Ich übersetze einen C++ - Code nach Delphi, und es gibt einige abstrakte Klassen, die übersetzt werden müssen. Diese Klassen werden als Parameter/Rückgabetypen verwendet, etc, und meine Frage ist, ob eine C++ Klassenhierarchie wie folgt aus:C++ - Klassen nach Delphi übersetzen

Thing = class 
    procedure blah; virtual; 
end; 

Thing2 = class(Thing) 
    function asdf(Thing) : Boolean; virtual; 
end; 

Und der Delphi-Code:

class Thing { 
    virtual void blah() = 0; 
}; 

class Thing2 : public Thing { 
    virtual bool asdf(Thing*) = 0; 
}; 

kann in Delphi geschrieben werden als kann C++ - Funktionen aufrufen, die C++ - Thing * s und ähnliches benötigen, und C++ - Code kann Delphi-Funktionen aufrufen, die Delphi-Dinge usw. benötigen. Wenn also die obige Übersetzung gemacht wird, entspricht ein C++ Thing2 * einem Delphi Thing2, das Delphi aufrufen kann es ist Methoden, usw.?

+2

Vielleicht möchten Rudy Velthuis' Artikel ‚Verwenden von C++ Objekte in Delphi‘ lesen (http://rvelthuis.de/ Artikel/Artikel-cppobjs.html). –

Antwort

2

Nicht ganz. In C++ bedeutet das Markieren einer Methode wie = 0, dass es sich um eine abstrakte Methode handelt. Um in Delphi denselben Effekt zu erhalten, müssen Sie es als virtual; abstract; markieren, nicht nur als virtual;. Wenn Sie in Delphi eine Klassenmitgliedsdeklaration direkt unter dem Klassennamen platzieren, wird sie standardmäßig als published deklariert, was bedeutet, dass sie öffentlich ist und RTTI dafür generiert wird. Das ist wahrscheinlich nicht die Absicht, stellen so eine Sichtbarkeit Umfang Erklärung (private, protected oder public) zuerst:

Thing = class 
public 
    procedure blah; virtual; abstract; 
end; 

Thing2 = class(Thing) 
public 
    function asdf(Thing) : Boolean; virtual; abstract; 
end; 
+0

Also fügt das Hinzufügen von Abstrakt nach virtuell ein Thing2 * in C++ zu einem Thing2 in Delphi? –

+0

@John: Ja, plus siehe meine Bearbeitung für einen weiteren kleinen Unterschied. –

+0

Perfekt, vielen Dank. –