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

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

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

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

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

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

Теоретический вопрос . Функция в разделе read имеет ли параметры ?. В учебном пособии Арханегелського сказано: Функция чтения-это функция БЕЗ ПАРАМЕТРА , возвращающее значение того типа, который объявлен для свойства. А в других источниках она с параметром, например:
Код:
 type
  TRectangle = class
  private
    fArea   : LongInt;
    fCoords : array[0..3] of Longint;
    function  GetCoord(Index: Integer): Longint;
    procedure SetCoord(Index: Integer; Value: Longint);
  public
    Property Area   : Longint read fArea;
    Property Left   : Longint Index 0 read GetCoord write SetCoord;
    Property Top    : Longint Index 1 read GetCoord write SetCoord;
То есть GetCoord с параметром Index: Integer. Так может она иметь параметр ?. Спасибо.
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 21:31   #2
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

функция не имеет параметров. Функция возвращает некоторое значение. В твоем примере GetCoord - значение типа Integer, которое вернет функция. А
Property Left : Longint Index 0 read GetCoord write SetCoord;
Property Top : Longint Index 1 read GetCoord write SetCoord;
использует не саму функцию GetCoord для чтения, а читает значение, передаваемое данной функцией.

Последний раз редактировалось Kazik; 02.06.2011 в 21:35.
Kazik вне форума Ответить с цитированием
Старый 02.06.2011, 21:58   #3
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Цитата:
функция не имеет параметров. Функция возвращает некоторое значение. В твоем примере GetCoord - значение типа Integer, которое вернет функция.
У GetCoord тип возвращаемого значения разве не Longint ?
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:01   #4
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

сори...точно...но все остальное верно...а к чему тебе ответ на этот вопрос??
Kazik вне форума Ответить с цитированием
Старый 02.06.2011, 22:13   #5
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;
      property Items[Index: Integer]: Double read GetItem; 
  end;
Я всё равно не понимаю .
То есть здесь function GetItem(Index: Integer): Double; в property Items[Index: Integer]: Double read GetItem; используется для чтения. В книгах сказано, что она не имеет параметров. А здесь параметр Index: Integer . Можно по -простому объяснить ? Сказано без параметров , а она с параметром . Почему ? Вот чего мне мозг взорвало .
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:17   #6
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

Посмотри весь код. Если где-то Index используется...тогда непонятно почему пишут что без параметров. Если не используется - тогда параметр передавать не нужно. Просто может быть опечатка в коде. Часто бывает, когда код пишет человек, часто используемый функции, а не процедуры. Просто привыкаешь к тому, что функция возвращает значение и содержит некоторый параметр...Вот и пишут так...
Kazik вне форума Ответить с цитированием
Старый 02.06.2011, 22:19   #7
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;
      property Items[Index: Integer]: Double read GetItem; default;
  end;
implementation
{ TVector }
constructor TVector.Create(AItems: array of Double);
var
  i: Integer;
begin
  SetLength(FItems, Length(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;
begin
  if Index in [Low(FItems)..High(FItems)] then
    Result := FItems[Index]
  else
    raise Exception.Create('Index is not Valid!');
end;
end.
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:27   #8
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

В книге значит опечатка...Index передает значение, которое должно входить в интервал для выполнения условия...так что просто забей...в книгах не всегда пишут правду...
Kazik вне форума Ответить с цитированием
Старый 02.06.2011, 22:30   #9
Beren42
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 50
По умолчанию

Не понял. Опечатка в Функция чтения-это функция БЕЗ ПАРАМЕТРА , возвращающее значение того типа, который объявлен для свойства ? Или из function GetItem(Index: Integer): Double;. Удалить параметр (Index: Integer) ?
Beren42 вне форума Ответить с цитированием
Старый 02.06.2011, 22:34   #10
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

опечатка в книге...функция передает параметр...код должен быть рабочим...если удалить Index, ты просто не сможешь компилировать код))
Kazik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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