2010-12-11 58 views
3

Je traduis du code C++ en Delphi et certaines classes abstraites doivent être traduites. Ces classes sont utilisées comme types paramètres/retour, etc, et ma question est si une hiérarchie de classes C++, comme ceci:Traduction de classes C++ en Delphi

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

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

peut être réécrite à Delphes comme:

Thing = class 
    procedure blah; virtual; 
end; 

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

Et le code Delphi peut appeler des fonctions C++ qui prennent C++ Thing * s et autres, et le code C++ peut appeler des fonctions Delphi qui prennent Delphi Things, etc. Donc, si la traduction ci-dessus est faite, un C++ Thing2 * sera égal à Delphi Thing2 où Delphi peut appeler c'est des méthodes, etc?

+2

Vous pouvez lire l'article de Rudy Velthuis « Utilisation d'objets C++ dans Delphi » (http://rvelthuis.de/ articles/articles-cppobjs.html). –

Répondre

2

Pas tout à fait. En C++, marquer une méthode comme = 0 signifie que c'est une méthode abstraite. En Delphi, pour obtenir le même effet, vous devez le marquer comme virtual; abstract;, pas seulement comme virtual;. En outre, dans Delphi, si vous placez une déclaration de membre de classe immédiatement sous le nom de la classe, elle sera déclarée par défaut published, ce qui signifie qu'elle est publique et que RTTI est généré pour elle. C'est probablement pas votre intention, donc mettre une déclaration de portée de visibilité (ou private, protectedpublic) premier:

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

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

Alors l'ajout de abstract après virtual rendra un Thing2 * en C++ équivalent à un Thing2 en Delphi? –

+0

@John: Oui, plus voir mon édition pour une autre différence mineure. –

+0

Parfait, merci beaucoup. –