![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание процедуры - оператора [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, вроде бы оно.