Главная страница
    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.071 c
15-1332230683
Ega23
2012-03-20 12:04
2013.03.22
Ну и что, что пост? Когда нам это мешало?


2-1337367250
TStas
2012-05-18 22:54
2013.03.22
Перехвать изменений текста в ричЭдите


2-1331751635
White
2012-03-14 23:00
2013.03.22
Сбивается БД


15-1346212466
Al2017
2012-08-29 07:54
2013.03.22
Не выходит задать течение нескольких несвязанных труб


15-1343320052
Хаус
2012-07-26 20:27
2013.03.22
Посоветуйте жизненные задачи по JavaScript





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский