Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание процедуры - оператора [D7]


Vitaliy ©   (2005-10-23 07:37:00) 

Доброе время суток!
Что-то не могу понять, как создать в делфи то, что на си бы выглядело так:
double operator[](int Index){}
Конкретизирую проблему. Есть класс (кстати, может его не от TObject надо наследовать...), который должен обеспечивать работу с матрицами. Вот такой:

type TMatrixArray = array of array of double;
type TMatrix = class (TObject)
 MatrixArray : TMatrixArray;
 Max, Min: double;
 Sx, Sy: integer;
 //... Процедуры загрузки обработки и др. методы
end;

Очень хочется чтобы мы могли получать элемент через Matrix[i] и Matrix[i][j].


wal   (2005-10-25 09:23:00) [1]


> Очень хочется чтобы мы могли получать элемент через Matrix[i]
> и Matrix[i][j].
Что-то я не понял. Через Matrix[i] мы что должны получить? Если матрица не является вектором, то через одну координату мы можем получить только вектор, а никак не элемент. А если получить нужно именно вектор, то тогда проблем никаких невижу:

type
 TVector = array of double;
 TMatrixArr: array of TVector;

 TForm2 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   function GetVector(I: Integer): TVector;
   { Private declarations }
 public
   { Public declarations }
   property Vector[I: Integer]: TVector read GetVector; default;
 end;

implementation

{$R *.dfm}

function TForm2.GetVector(I: Integer): TVector;
begin
{ToDo}
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Caption := FloatToStr(Vector[1][2]);
end;


C уважением.


GuAV   (2005-10-24 22:56:00) [2]


> Очень хочется чтобы мы могли получать элемент через
> Matrix[i] и Matrix[i][j].


Реализуй Matrix как OLE объект со своей реализацией IDispatch, обрабатывай индексы в IDispatch::Invoke и твори что хочешь  ;-)

PS: навеяно моим недавним вопосом про синтаксис ;)


MBo   (2005-10-24 13:21:00) [3]

Прочитай в хелпе об Array properties

>хочется чтобы мы могли получать элемент через Matrix[i] и Matrix[i][j].
Это возможно, но только для одного из вариантов - либо одномерного, лиюо двумерного - путем объявления индексируемого свойства с default


Kolan   (2005-10-24 12:24:00) [4]

В D7 нет перегрузки операторов...


Vitaliy   (2005-10-24 07:37:00) [5]

Посмотрел, может даже и понял.
Заморачиваться не буду :)
Проще сделать поледоступным и обращаться прямо к массиву. Может и не в лучших традициях ООП, но зато проще и работает. Всем спасибо!


Loginov Dmitry   (2005-10-23 09:26:00) [6]

Это вроди этого?:
List: TStringList;
.....
S := List[i];

Посмотри реализацию TStringList


Virgo_Style   (2005-10-23 09:20:00) [7]

попробуй посмотреть directive default, вроде бы оно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо