![]() |
|
|
|
|
#1
|
|||
|
|||
|
Код:
program Project1;
uses
SysUtils,
Dialogs;
type
TLevel = class
FreqLevel : array of Integer;
constructor Create (CountPoint : Integer);
destructor Destroy ();
end;
constructor TLevel.Create(CountPoint : Integer);
begin
SetLength(FreqLevel, CountPoint);
end;
destructor TLevel.Destroy ();
begin
SetLength(FreqLevel, 0);
end;
type
TData = class
private
CountPass : Integer;
CountPoint : Integer;
procedure RescailSize ();
public
Freq : array of Integer;
Pass : array of TLevel;
procedure AddFreqLevel (index , NumPass, FreqValue, FreqLevelValue: Integer);
procedure AddLevel (index , NumPass, FreqLevelValue: Integer);
constructor Create (CountPoint, CountPass : integer);
destructor Destroy ();
end;
constructor TData.Create (CountPoint, CountPass : integer);
var
i : Integer;
begin
self.CountPass := CountPass;
self.CountPoint := CountPoint;
SetLength(Freq, CountPoint);
SetLength(Pass, CountPass);
for i := 0 to CountPass-1 do
Pass[i] := TLevel.Create(CountPoint);
end;
procedure TData.RescailSize ();
var
i : Integer;
newSize : Integer;
begin
newSize := CountPass * 2;
SetLength(Pass, newSize);
for i:= CountPass to newSize-1 do
Pass[i] := TLevel.Create(CountPoint);
CountPass := newSize;
end;
procedure TData.AddFreqLevel (index , NumPass, FreqValue, FreqLevelValue: Integer);
begin
Freq[index] := FreqValue;
Pass[NumPass].FreqLevel[index] := FreqLevelValue;
end;
procedure TData.AddLevel (index , NumPass, FreqLevelValue: Integer);
begin
if self.CountPass <= NumPass then
RescailSize ();
Pass[NumPass].FreqLevel[index] := FreqLevelValue;
end;
destructor TData.Destroy ();
begin
SetLength(Freq, 0);
SetLength(Pass, 0);
end;
var
Data : TData;
i : Integer;
begin
Data := TData.Create(100,1);
Data.AddFreqLevel(0,0,101,55);
Data.AddFreqLevel(1,0,102,77);
Data.AddFreqLevel(2,0,103,70);
Data.AddLevel(0,1,66);
Data.AddLevel(1,1,79);
Data.AddLevel(2,1,88);
ShowMessage(IntToStr(Data.Freq[2]));
ShowMessage(IntToStr(Data.Pass[1].FreqLevel[2]));
Data.Free;
end.Вопрос: 1. Правильно реализованы классы? 2. Правильно ли я освобождаю память? |
|
#2
|
||||
|
||||
|
Код:
public
destructor Destroy; override;
destructor TPersistent.Destroy;
begin
inherited Destroy;
end; |
|
#3
|
|||
|
|||
|
как вызвать деструктор destructor TLevel.Destroy ();?
|
|
#4
|
||||
|
||||
|
Ну как-то так наверное:
Код:
obj.Free |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Freeongoo (15.04.2013)
| ||
|
#5
|
|||
|
|||
|
Т.е. в моем случае надо так?
Код:
for i := 0 to N do
Data.Pass[i].Free; |
|
#6
|
||||
|
||||
|
Ну как-то так.
Я твой код не читал. |