Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
14-1130167619
lookin
2005-10-24 19:26
2005.11.13
Пока ММг круче Динамо М....


14-1130088231
alexsis
2005-10-23 21:23
2005.11.13
Бесплатный посыл СМС-ок


14-1129885338
User133
2005-10-21 13:02
2005.11.13
Windows2000 и права пользователя


6-1122620933
Hereticsoul
2005-07-29 11:08
2005.11.13
TClientSocket пытаться подключиться.


3-1128068250
KeyC
2005-09-30 12:17
2005.11.13
Direct access to MS Access





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский