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

Вниз

Вопрос оперторов...   Найти похожие ветки 

 
Tihas ©   (2003-02-26 23:45) [0]

Долгое время я знал, что Object Pascal не поддерживает перегрузку операций, но вдруг я замечаю у класс
TList вот такое вырожение.

property Items[Index: Integer]: Pointer read Get write Put; default;

Таким оброзом, а они смогли "подцепить" операцию [].
Так вопрос существуют ли ещё в Delphi, такого же типа
конструкции, но с другими операциями? А если нет, то зачем надо было вводить эту возможность(сильного удобства не прибавило)?
Заранее спасибо.


 
Романов Р.В. ©   (2003-02-26 23:59) [1]

F1 - Array properties


 
Palladin ©   (2003-02-27 00:38) [2]

ничего себе не прибавило...
такая конструкция существует давным давно... еще с ранних версий Delphi

позволяет очень удобно обращатся к однородным TList
например есть у тебя


PRecord=^TRecord;
TRecord=record
field1:string;
field2:integer;
end;


у себя в классе делаешь объявление

type
TMyClass=class
private
m_lItems:TList;
function GetItem(idx:integer):TRecord;
public
property Items[Indxe: integer]: TRecord read GetItem; default;
end;

function TMyClass.GetItem;
begin
result:=PMyRecord(m_lItems[idx])^;
end;


и тогда обращение к списку сводится лишь к такому

var
MyObject:TMyClass;

...

MyObject[1]
или
MyObject[i];

еще круче когда в параметре индексированого свойства указывается не индекс а скажем какое нибудь другое поле... например...

PRecord=^TRecord;
TRecord=record
field1:string;
field2:integer;
end;

type
TMyClass=class
private
m_lItems:TList;
function GetItemByField2(val:integer):PRecord;
public
property ItemsByField2[Val: integer]: PRecord read GetItemByField2; default;
end;

function TMyClass.GetItem;
var
i:integer;
begin
result:=nil;
for i:=0 to m_lItems.Count-1 do
if PRecord(m_lItems[i]).Field2=val then
begin
result:=m_lItems[i];
break;
end;
end;

и обращатся к любой записи по значению Field2 становится просто прелестно

MyObject[17]

это простые примеры удобства данной конструкции...


 
Palladin ©   (2003-02-27 00:46) [3]

если ты не заметил то TStringList.Values реализован именно таким способом...


 
Anatoly Podgoretsky ©   (2003-02-27 10:29) [4]

Только здесь перегрузкой операторов и не пахнет, это свойство а не оператор и это было изначально для свойств.
Да и [] это тоже не оператор, а инднексные скобки.


 
Tihas ©   (2003-02-28 23:54) [5]

Спасибо за комментарии.


 
Strumpf ©   (2003-03-03 14:49) [6]

Вроде где-то читал, что перегрузку операторов все-же ввели в Delphi 7. Это правда?


 
calm ©   (2003-03-03 15:03) [7]

Да она была как минимум в D6, и если не ошибаюсь в D5.
Перегрузка операций осущствляется директивой overload;


 
Polevi ©   (2003-03-03 15:08) [8]

операции это процедуры и ф-ии но никак не операторы


 
Strumpf ©   (2003-03-03 15:13) [9]

calm © (03.03.03 15:03)
Что-то Вы не о том ...


 
Strumpf ©   (2003-03-03 15:15) [10]

а может это я не о том. Имелось в виду операций, конечно ("+", "-" и т.д.).


 
calm ©   (2003-03-03 15:47) [11]


> Долгое время я знал, что Object Pascal не поддерживает перегрузку операций,

Думается мне, что я о том, что спрашивали...

А перегрузку оператором можно выполнить в D6.
Хотя, строго говоря, это не будет являться перегрузкой. Но имеется возможность определить действия +, - и т.д. для данных своего типа (TMyDataType). Это можно сделать, научив вариантные (variant) переменные воспринимать значения типа TMyDataType.



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
14-39545
GL00m
2003-02-25 16:46
2003.03.13
Access vs Delphi (не надо смеяться, прошу помочь)


4-39633
TankMan
2002-12-18 01:19
2003.03.13
Как имитировать нажатие мышки в чужом приложении....


1-39292
GIL
2003-03-04 04:48
2003.03.13
Динамические массивы и sizeof


14-39547
michael_b
2003-02-26 16:55
2003.03.13
Где взять описание стандарта Pascal я?


3-39163
alkmas
2003-02-19 15:03
2003.03.13
Внедрение компонента в другой компонент