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

Вниз

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

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

Наверх





Память: 0.58 MB
Время: 0.036 c
7-39594
Зина
2003-01-16 13:39
2003.03.13
изменить порядок обработки событий.


3-39203
Nick2000
2003-02-20 19:56
2003.03.13
Поиск и сортировка


1-39373
grei
2003-03-02 19:37
2003.03.13
Открытие файлов через windows


1-39372
ЮРИЙ_К
2003-02-28 17:17
2003.03.13
Как обратиться к Item и SubItem компонента ListView


6-39450
Diatel
2003-01-25 00:31
2003.03.13
Addon к браузеру





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