情况
我写了一个用于二次方程的类,代码如下。你可以在这里找到完整的代码,但对于问题来说并不是非常相关。
type
TArrayOfDouble = array of array of double;
type
TEqSecGrado = class
private
//variables
a, b, c: double;
delta: double;
solutions: TArrayOfDouble;
solRealCount: integer;
solImaginaryCount: integer;
class var currentIstances: integer;
class var totalIstances: integer;
//methods
function getDelta(const vala, valb, valc: double): double; overload;
public
constructor Create(const a, b, c: double);
destructor Destroy; override;
//methods
function getDelta: double; overload;
function getSolutions: TArrayOfDouble; virtual;
//properties
property valueOfA: double read a;
property valueOfB: double read b;
property valueOfC: double read c;
property realSolutionsCount: integer read solRealCount;
property imaginarySolutionsCount: integer read solImaginaryCount;
class property currentEquationsCount: integer read currentIstances;
class property totalEquationsCount: integer read totalIstances;
end;
我打算创建一个名为TArrayOfDouble
的新类型,用来存放我的方程解。在主窗体中,我按照以下方式使用这个类:
procedure TForm3.Button1Click(Sender: TObject);
var solver: TEqSecGrado;
soluzioni: TArrayOfDouble;
begin
//f(x) = 3x^2 - x - 2 -> [sol.1 = 1 | sol.2 = -0,666666666666667]
solver := TEqSecGrado.Create(3,-1,-2);
try
soluzioni := solver.getSolutions;
//soluzioni[0][0] = 1; soluzioni[0][1] = 0;
//soluzioni[1][0] = -0,666666666666667; soluzioni[1][1] = 0;
finally
solver.Free;
end;
end;
现在我已经得到了soluzioni
中的结果,可以输出它们了。(我使用了一个矩阵,因为我将实际解放在了第一个位置,这种情况下是1和-0.67,如果需要,第二个位置是虚数解)。
问题
当我输出解时,我想将它们转换成分数。我想做类似于soluzioni[a][b].toFraction
的事情。所以我想使用双重记录助手。
type
TSupport = record helper for Double
function toFraction: string;
function toString: string; //I have added this LATER
end;
我有一个疑问,当我创建了TSupport
和toFraction
方法后,我可以调用soluzioni[0][0].toFraction,但是我无法调用soluzioni[i][0].toString。
为了解决我的问题,我决定添加了toString函数,这样一切就正常了。记录助手是否隐藏了所有其他方法?如果我删除记录助手,我是否仍然可以像以前一样使用toString方法?
我知道助手是一种扩展类而不使用继承的方式,但为什么我只能使用我在助手中声明过的方法呢?