Показать сообщение отдельно
  #1  
Старый 13.04.2013, 21:25
Freeongoo Freeongoo вне форума
Прохожий
 
Регистрация: 29.07.2011
Сообщения: 11
Репутация: 10
По умолчанию Создание класса

Код:
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. Правильно ли я освобождаю память?
Ответить с цитированием