|
#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 — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Freeongoo (15.04.2013)
|
#5
|
|||
|
|||
Т.е. в моем случае надо так?
Код:
for i := 0 to N do Data.Pass[i].Free; |
#6
|
||||
|
||||
Ну как-то так.
Я твой код не читал. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
В принципе это делать не обязательно
Код:
destructor TLevel.Destroy (); begin SetLength(FreqLevel, 0); end; ... destructor TData.Destroy (); begin SetLength(Freq, 0); SetLength(Pass, 0); end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Freeongoo (15.04.2013)
|