Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 509

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Кому не трудно, просмотрите мой код и объясните, почему же my.b[2] не принимает значение. Ну или почему выводится неправильное значение...

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10.  
  11. TForm1 = class(TForm)
  12. Button1: TButton;
  13. procedure Button1Click(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19.  
  20. TMyClass = class(TObject)
  21.  
  22. procedure SetB(Index : integer; NewValue : integer);
  23. function GetB(Index : integer) : integer;
  24. property b[Index : integer] : integer read GetB write SetB;
  25.  
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30. My : TMyClass;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35.  
  36. { TMyClass }
  37.  
  38. function TMyClass.GetB(Index: integer): integer;
  39. begin
  40. end;
  41.  
  42. procedure TMyClass.SetB(Index, NewValue: integer);
  43. begin
  44. end;
  45.  
  46. procedure TForm1.Button1Click(Sender: TObject);
  47.  
  48. begin
  49.  
  50. My := TmyClass.Create;
  51. My.b[2] := 20;
  52. showmessage(inttostr(my.b[1]));
  53. showmessage(inttostr(my.b[2]));
  54. My.Free;
  55.  
  56. end;
  57.  
  58. end.
  59.  


padonak Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: padonak (статус: Посетитель)
Вопрос отправлен: 17 августа 2010, 18:36
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, padonak!
Ну потому что property b[Index : integer] это не массив. и как обрабатывать индексы, нужно решить самому.
я вижу заготовки методов

// этот метод получает индекс и должен возвратить значение элемента
function TMyClass.GetB(Index: integer): integer;
begin
end;
// этот получает индекс и должен как то сохранить.
procedure TMyClass.SetB(Index, NewValue: integer);
begin
end;

Если припустить, что в private части у нас объявлено
field:array[1..100] of integer;
тогда эти методы можно реализовать так
// этот метод получает индекс и должен возвратить значение элемента
function TMyClass.GetB(Index: integer): integer;
begin
if (index < 1) or (index > 100)
 then result := -1 //мы за пределами
else
  result := field[index];
end;
// этот получает индекс и должен как то сохранить.
procedure TMyClass.SetB(Index, NewValue: integer);
begin
if  (index >= 1) and (index <= 100) then 
  field[index] := NewValue;
 
end;

Конечно, в коде все это делается обычно посложнее. Можно считать что это не "массив", а такая себе функция с параметром индекс:)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 17 августа 2010, 18:55
Оценка за ответ: 5

Комментарий к оценке: Спс. Я то думал что b[Index : integer] уже как массив, а ннет...

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.03 сек.