Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Переопределение свойства класса-наследника   Найти похожие ветки 

 
Verner ©   (2012-05-16 09:20) [0]

Здравствуйте, уважаемые мастера. Пытаюсь создать класс, наследник класса TList модуля Classes^:

 TScheduleTime = record
   TimeStamp: TDateTime;
   Active: boolean;
   Done: boolean;
 end;

 PScheduleTime = ^TScheduleTime;//тип свойства, с которым идет работа

 // Список времен расписания.
 TScheduleTimeList = class (TList)
 private
     function GetItems:PScheduleTime;
 public
   function NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
   property Items[aIndex: integer]: PScheduleTime read GetItems; default;
 end;


Реализовал тело функции GetItems, возвращающей значение свойства, для заглушки:

function TScheduleTimeList.GetItems:PScheduleTime;
var PSH:PScheduleTime;
begin
Result:=PSH;
end;


При нажатии на проверку синтаксиса, ругается на эту строку

   property Items[aIndex: integer]: PScheduleTime read GetItems; default;

  -- Incompatible types

Пробовал это свойство объявить с типом Pointer, как в род. классе TList - не помогает. Буду очень благодарен, если кто сможет сказать, в чём тут дело.


 
Медвежонок Пятачок ©   (2012-05-16 09:24) [1]

ну как минимум гетитемс должно иметь один параметр


 
Dimka Maslov ©   (2012-05-16 09:26) [2]

Во первых GetItems должен быть объявлен как function GetItems(AIndex: Integer): PScheduleTime. А во вторых то, как сделано это прямая дорога к access violation и полной неработоспособности


 
Verner ©   (2012-05-16 09:51) [3]

Огромное спасибо, не докумекал!

>>А во вторых то, как сделано это прямая дорога к access violation и полной неработоспособности<<
Ну так конструктор и деструктор еще не реализованы, не весь функционал класса.


 
Dimka Maslov ©   (2012-05-16 10:05) [4]


> Ну так конструктор и деструктор еще не реализованы, не весь
> функционал класса.


Внимательно смотрим, что возвращает функция GetItems:
Значение неинициализированного указателя, являющегося внутренней переменной функции. С тем же успехом можно было просто использовать генератор случайных чисел. Так делать нельзя.


 
KSergey ©   (2012-05-16 12:48) [5]

Я чета не понял: у класса TList есть метод Get (а не GetItems)

TScheduleTimeList = class (TList)
 protected   // а не private
    function Get(Index: Integer): PScheduleTime;
 public
   function NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
   property Items[aIndex: integer]: PScheduleTime read Get; default;
end;

function TScheduleTimeList.Get(Index: Integer): PScheduleTime;
begin
 Result := inherited Get(Index);
end;

function TScheduleTimeList.NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
begin
end;


 
Ega23 ©   (2012-05-16 15:43) [6]

У TList надо Notify перекрыть.


 
Leonid Troyanovsky ©   (2012-05-16 18:28) [7]


> Ega23 ©   (16.05.12 15:43) [6]

> У TList надо Notify перекрыть.

А оно у него есть?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2012-05-16 18:44) [8]


> Leonid Troyanovsky ©   (16.05.12 18:28) [7]

> А оно у него есть?

Есть. Всем расслабиться.
Sorry.

--
Regards, LVT.


 
KSergey ©   (2012-05-17 08:10) [9]

> Ega23 ©   (16.05.12 15:43) [6]
> У TList надо Notify перекрыть.

Как это решит задачу получения от Items[] типа PScheduleTime ?
Это уже следующий шаг )


 
Romkin ©   (2012-05-24 18:03) [10]

Вообще говоря, писать потомка TList и использовать его - крайне неблагодарное занятие. Его использовать надо.


 
MBo ©   (2012-05-24 19:19) [11]

>Romkin ©   (24.05.12 18:03) [10]
Мощно задвинул ;)


 
Ega23 ©   (2012-05-24 19:25) [12]


> Мощно задвинул ;)


Я даже знаю откуда у этого задвига ноги растут. Более того, я с ним в целом согласен.
Не далее как в прошлый четверг сидели мы с Ромой у меня на кухне, пили "Лакинское" и "Чешское" и как раз бурно обсуждали: имеет ли смысл писать наследников от TList, либо делать класс-обёртку над листом, вынося в паблик ровно то, что нужно видеть снаружи.
Т.е.

 TMyList = class (TList)
 
 vs.

 TMyList = class (TObject)
 private
   FItems: TList
 public
   Items
   count
   etc
 end;  


Сошлись на втором.
Точнее, сошлись на TObjectList<T>, но потом - на втором. :)


 
MBo ©   (2012-05-25 05:49) [13]

>Ega23
Мне сдаётся, что Роман выдал только часть мысли. Тебе эта незавершённость понятна благодаря контексту, а я вот недопонял... Вот, например, слово "его" в первом и втором предложении относится к одной и той же сущности?


 
Romkin ©   (2012-05-25 15:24) [14]

Ну под вечер из меня моща так и прет. Включать список в свой объект надо, обычный пример - Components + ComponentsCount и т.д.
А топикстартеру я бы рекомендовал посмотреть на TCollection, и не извращаться с выделением памяти под записи.


 
Amoeba_   (2012-05-25 15:40) [15]


> А топикстартеру я бы рекомендовал посмотреть на TCollection

Здесь статья Ю.З.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=215



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.067 c
15-1334294284
vajo
2012-04-13 09:18
2013.03.22
Маркировка HDD Seagate.


15-1348299645
Дмитрий Белькевич
2012-09-22 11:40
2013.03.22
Ищу компонент для создания вистовских окон. Картинка в теме.


15-1337884316
Bluejohn
2012-05-24 22:31
2013.03.22
Правильно ли сделан список?


2-1336632149
igorium
2012-05-10 10:42
2013.03.22
Чтение названий файлов в написанных НЕрусскими и НЕанглийскими


15-1345802495
cwl
2012-08-24 14:01
2013.03.22
Unicode в идентификаторах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский