我正在将一些C++代码翻译为ObjectPascal(第一次),而且C++对我来说仍然很陌生。
C++头文件看起来像这样:
class RenumFd {
public:
RenumFd(int length);
~RenumFd();
void CompFd(double *buff);
//...other public functions cut for space
private:
void rmfd(int n, int isgn, double *a, int *ap, double *kw);
//...other private functions cut for space
int _length;
int *_ap;
double *_kw;
}
我已经这样翻译它们:
Type
TRenumFD = class
private
_length: integer;
_ap: Pinteger;
_kw: Pdouble;
procedure rmfd(n:integer; isgn:integer; var a:double; var ap:integer; var kw:double);
//... other procedures cut for space
public
constructor Create(const length:integer);
destructor Destroy(); override;
procedure CompFd(var buff:double);
end;
我读到在C++中作为参数使用的指针应该设置为Object Pascal中的var参数。这是否正确?还是应该坚持更直接的翻译(担心以后出现问题)。
此外,在C++构造函数中有以下代码,其中一行让我不太确定。
RenumFd::RenumFd(int length) {
_length = length;
_ap = new int[2 + (1 << ((int)(log(2.0 + length) + 0.5) / 2))];
_ap[0] = 0; <-- is this setting the pointer to nil, or assigning 0?
//...
}
我不确定是否应该将Object Pascal中的那行代码翻译为使用零填充第一个元素还是赋值为nil:
_ap := AllocMem(2 + (1 shl (trunc(ln(2.0 + length) + 0.5) / 2))) * sizeOf(integer));
_ap := nil;
也许我在过度猜测意图?
Ln
表示自然对数。 - Free Consultingnew
将要分配的元素数量。这是一个常数。如果你愿意牺牲那个漂亮的表达式(因为Borland编译器不喜欢常数表达式中的实数),那么普通数组就适用。 - Free Consulting