Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 22:36   #11
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Резюмируя, если меня кто спросит ). Функция чтения-это функция как С ПАРАМЕТРОМ так и БЕЗ ПАРАМЕТРА , возвращающее значение того типа, который объявлен для свойства. Так ?
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:39   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще то в книге правда написана, но она написана, для простых свойств.
а это
Код:
property Items[Index: Integer]: Double read GetItem;
свойство массив(индексатор) и у него немного иные правила.
в принципе вы их уже сами заметили.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.06.2011, 22:43   #13
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Тогда так. Функция чтения-это функция как С ПАРАМЕТРОМ для свойств -массивов так и БЕЗ ПАРАМЕТРА для простых свойств , возвращающее значение того типа, который объявлен для свойства. Правильно ?
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:58   #14
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Спасибо Kazik и Пепел Феникса.
Beren42 вне форума Ответить с цитированием
Старый 03.06.2011, 13:52   #15
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Многое я в этом коде не понимаю, поэтому напишу , что понятно мне. Исправьте меня если я не прав
Код:
unit Unit2;
interface
uses
  SysUtils;
type
  TVector = class          // имя класса
    private
      FItems: array of Double; // поля класса-динамический массив
      function GetItem(Index: Integer): Double; // метод класса- с парматром


    public
      constructor Create(AItems: array of Double); //  конструктор 
      destructor Destroy; override;  //Зачем у деструктора  override; ?
      property Items[Index: Integer]: Double read GetItem; default; // В обычных свойствах  функция для чтения без параметра, но здесь массив свойств . Поэтому она с параметром. А вот зачем default ?
  end;
implementation
{ TVector }
constructor TVector.Create(AItems: array of Double); // Реализация конструктора
var
  i: Integer;
begin
  SetLength(FItems, Length(AItems)); // создание динамического массива FItems длинной AItems
  for i := Low(AItems) to High(AItems) do  // цикл от наименьшего индекса динамического массива да наибольшего
    FItems[i] := AItems[i]; //  Эту строчку я вообще не понимаю
end;
destructor TVector.Destroy; // реализация деструктора
begin
  SetLength(FItems, 0); //  Уничтожение динамичекого массива
  inherited; // унаследованый деструктор
end;
function TVector.GetItem(Index: Integer): Double; // Реализация метода GetItem
begin
  if Index in [Low(FItems)..High(FItems)] then  // если Index  лежит в интервале  от наименьшего до наибольшого индекса массива 
    Result := FItems[Index] // То что ? Строка тоже не понятна
  else  иначе
    raise Exception.Create('Index is not Valid!'); //  Вообще не понятно
end;
end.

Последний раз редактировалось Beren42; 03.06.2011 в 13:54.
Beren42 вне форума Ответить с цитированием
Старый 03.06.2011, 20:32   #16
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
if Index in [Low(FItems)..High(FItems)] then
я бы не использовал в данном случае такую конструкцию.
Посмотрите на код:

Код:
var FItems: array of Double;
    a : integer;
begin
   SetLength(FItems, 2000);

   a := 210;
   if a in [low(FItems) .. high(FItems)]
   then writeln('ok')
   else writeln('wrong');
думаю, Вам будет интересно увидеть, что появится на экране и разобраться почему.

Цитата:
А вот зачем default ?
В данном случае для удобства. Помеченное как default индексированное свойство можно не указывать при вызове

Код:
V := TVector.Create...
// Следующие два вызова одно и то-же: 
a := V[12] 
a := V.Items[12]
Цитата:
//Зачем у деструктора override; ?
Потому что у предка (TObject) этот метод объявлен как виртуальный
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства DBLookupComboBox drossell Помощь студентам 0 24.11.2010 20:43
Срочно:Свойства WEBrowser в DELPHI Larec Общие вопросы Delphi 2 13.05.2009 21:46
Индексные свойства//Delphi Rifler Помощь студентам 2 29.09.2008 14:57
Свойства объектов (Delphi) FliPP Общие вопросы Delphi 5 05.01.2008 04:09