Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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. Правильно ли я освобождаю память?
Ответить с цитированием
  #2  
Старый 14.04.2013, 08:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
  public
    destructor Destroy; override;

destructor TPersistent.Destroy;
begin
  inherited Destroy;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 14.04.2013, 19:05
Freeongoo Freeongoo вне форума
Прохожий
 
Регистрация: 29.07.2011
Сообщения: 11
Репутация: 10
По умолчанию

как вызвать деструктор destructor TLevel.Destroy ();?
Ответить с цитированием
  #4  
Старый 14.04.2013, 20:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну как-то так наверное:
Код:
obj.Free
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Freeongoo (15.04.2013)
  #5  
Старый 14.04.2013, 21:46
Freeongoo Freeongoo вне форума
Прохожий
 
Регистрация: 29.07.2011
Сообщения: 11
Репутация: 10
По умолчанию

Т.е. в моем случае надо так?

Код:
for i := 0 to N do
     Data.Pass[i].Free;
Ответить с цитированием
  #6  
Старый 14.04.2013, 22:34
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну как-то так.
Я твой код не читал.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 14.04.2013, 22:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В принципе это делать не обязательно
Код:
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)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter