Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > создание класса


Автор: kuzyara 29.10.2009, 20:11
Я хочу создать массив переменных типа TIntegerList (такой есть в http://www.codenet.ru/progr/delphi/stat/AcedUtils.php в AcedContainers). Но так как ооп это хорошо, хочу сделать это на подобии TStringList, ну чтобы там add, count, delete ...

вот что я смог написать:
Код

  TIntLAray = class (TList)
  protected
    function Get(Index: Integer): TIntegerList;
    procedure Put(Index: Integer; Item: TIntegerList);
  public
    function Add(Item: TIntegerList): Integer;
    procedure Delete(Index: Integer);
    property Count: Integer read FCount write SetCount;
    property Items[Index: Integer]: TIntegerList read Get write Put; default;
  end;


это я скопировал из TList и заменил Pointer на TIntegerList. Но ведь это влекёт за собой и описание FCount, SetCount из property Count, и т.д. Неужели чтобы создать список не из строк, а из TIntList, придется переписывать весь класс? Всё же одинаковое... Как облегчить себе участь?
Спасибо.
зы: знаете какой-нибудь хороший материал про то, чем protected отличается от private, а override от overload? 

Автор: Beltar 30.10.2009, 08:25
1) На кой фиг тебе вообще даже знать как там устроено Count? Его родной функционал тебя не устраивает?
2) Что-то я не понял архитектуры. Тебе нужно создать список переменных, что наиболее вероятно, или список массивов, как я понял из кода?
3) 

Цитата

Но так как ооп это хорошо, хочу сделать это на подобии TStringList


А причем тут вообще TStringList? Ты же сам TList используешь.

Цитата

чем protected отличается от private


private это кишки, а protected все то, что в дальнейшем может быть перекрыто в наследниках. Собственно все компоненты VCL наследуются так (на примере TreeView):
TCustomControl->TCustomTreeView (полнофункциональное дерево, но все его члены имеют видимость не выше protected) ->TTreeView (все члены, которые должны быть доступны вынесены в public и published). Если понадобиться наследник у которого какое-то свойство д/б недоступным (например, можно набор меток сделать, которые бы имели свойство Value разных типов и выводили бы его строковое значение, в этом случае тебе public\published Caption просто не нужен и даже вреден), то наследоваться надо не от конечного компонента, а от Custom'а.

Цитата

а override от overload?


Совершенно разные вещи, overload просто позволяет иметь несколько процедурок с одним именем, но разными параметрами. override перекрывает динамические или виртуальные методы.

Автор: MetalFan 30.10.2009, 12:54
Beltar, а вообще, мое имхо, что автору надо почитать книжку по основам программирования в делфи, раз уж он override от overload не отличает...

Автор: Snowy 30.10.2009, 15:37
Если дельфи 2009 и выше, то создаётся в одну строчку 
Код
TList<Integer>
 smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)