Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Создание процедуры - оператора   Найти похожие ветки 

 
Vitaliy   (2005-10-23 07:37) [0]

Доброе время суток!
Что-то не могу понять, как создать в делфи то, что на си бы выглядело так:
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].


 
Virgo_Style ©   (2005-10-23 09:20) [1]

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


 
Loginov Dmitry ©   (2005-10-23 09:26) [2]

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

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


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

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


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

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


 
MBo ©   (2005-10-24 13:21) [5]

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

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


 
GuAV ©   (2005-10-24 22:56) [6]


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


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

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


 
wal ©   (2005-10-25 09:23) [7]


> Очень хочется чтобы мы могли получать элемент через 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 уважением.



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.036 c
2-1129648328
VadimX
2005-10-18 19:12
2005.11.13
MaskEdit


2-1130072381
tmc
2005-10-23 16:59
2005.11.13
Переменные среды Windows и TIniFile.Create


14-1130112434
хАЦКЕРЕНОК
2005-10-24 04:07
2005.11.13
хАЦКЕРЕНОК


14-1130140271
syte_ser78
2005-10-24 11:51
2005.11.13
какие базы (локальные) поодерживают украинскую локализацию?


4-1126050466
SergProger
2005-09-07 03:47
2005.11.13
PopupMenu & TrayIcon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский