2010-12-11 122 views
3

我正在將一些C++代碼翻譯成Delphi,並且有一些需要翻譯的抽象類。這些類用作參數/返回類型,等等,我的問題是,如果一個C++類層次結構像這樣:將C++類轉換爲Delphi

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函數的Delphi函數等等。所以基本上,如果進行了上面的轉換,C++ Thing2 *將等於Delphi可以調用的Delphi Thing2它的方法等?

+2

您可能需要閱讀魯迪Velthuis的文章‘Delphi中使用C++對象’(http://rvelthuis.de/文章/篇-cppobjs.html)。 – 2010-12-12 17:02:20

回答

2

不完全。在C++中,將方法標記爲= 0意味着它是一種抽象方法。在Delphi中,要獲得相同的效果,您必須將其標記爲virtual; abstract;,而不僅僅是virtual;。另外,在Delphi中,如果您立即在類名稱下放置類成員聲明,​​它將默認聲明爲published,這意味着它是公有的,併爲其生成RTTI。這可能不是你的本意,所以把知名度聲明範圍(private, protectedpublic)第一名:

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

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

那麼,在虛擬後添加抽象將使C++中的Thing2 *等同於Delphi中的Thing2? – 2010-12-11 03:57:08

+0

@John:是的,再加上看我的編輯另一個小小的區別。 – 2010-12-11 03:58:22

+0

非常完美,非常感謝。 – 2010-12-11 04:02:02