Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в Delphi работать с операторами? [D7, XP]


S-C-L ©   (2009-12-16 20:06:00) 

Люди помогите!!!
Есть код на С++:

//! Array operator
float & operator[]( unsigned int i )
{
 if ( i < 4 ) return xyzw[i];
}
//! Const array operator
const float & operator[]( unsigned int i ) const
{
 if ( i < 4 ) return xyzw[i];
}


Нужно его переделать на Delphi 7.
Подскажите как.


Игорь Шевченко   (2009-12-16 23:15:00) [1]


> Ценю только дельные советы!


Ценю только деньги за ответы


Anatoly Podgoretsky   (2009-12-16 22:25:00) [2]

> Anatoly Podgoretsky  (16.12.2009 21:35:14)  [14]

И вариант пользовательский - Ctrl+C, Ctrl+V, Ctrl+V, ...


Anatoly Podgoretsky   (2009-12-16 21:35:00) [3]

> MBo  (16.12.2009 20:27:04)  [4]

Alt+32


Омлет   (2009-12-16 21:23:00) [4]

> upSkin |= ( iSkinPart == index );


upSkin :=  upSkin or (iSkinPart = index );


S-C-L   (2009-12-16 21:01:00) [5]

Как заменить оператор |=?

upSkin |= ( iSkinPart == index );


Nucer   (2009-12-16 20:57:00) [6]


> S-C-L ©   (16.12.09 20:53) [10]

Да. Но это будут аналоги +=, -=, /=, *=. Можно еще сделать методы, аналогичные обычным с двумя операндами.


S-C-L   (2009-12-16 20:53:00) [7]

т.е:

//! Add-equals operator
procedure Add( v : Vector2);
procedure Sub( v : Vector2);
procedure Mul( v : Vector2);
procedure Div( v : Vector2);

Я правильно понял?


Nucer   (2009-12-16 20:51:00) [8]


> А как мне тогда этот код реализовать в Delphi?

Через методы класса.


S-C-L   (2009-12-16 20:50:00) [9]


> MBo ©   (16.12.09 20:47) [7]

А как мне тогда этот код реализовать в Delphi?


MBo   (2009-12-16 20:47:00) [10]

Никак. В Д7 перегрузки операторов нет, только индексированные свойства.
Для вариантов что-то такое было только.

С Д2006 можно перегружать операторы для записей (однако операторы += и т.п. - недельфийские, и соответственно перегружать нечего)


S-C-L   (2009-12-16 20:40:00) [11]

А как в этом случае сделать оператор +=?

//! Add-equals operator
Vector2 & operator+=( const Vector2 & v )
{
 xy[0] += v.xy[0];
 xy[1] += v.xy[1];
 return *this;
}
//! Add operator
Vector2 operator+( const Vector2 & v ) const
{
 Vector2 w( *this );
 return ( w += v );
}
//! Minus-equals operator
Vector2 & operator-=( const Vector2 & v )
{
 xy[0] -= v.xy[0];
 xy[1] -= v.xy[1];
 return *this;
}
//! Minus operator
Vector2 operator-( const Vector2 & v ) const
{
 Vector2 w( *this );
 return ( w -= v );
}


S-C-L   (2009-12-16 20:32:00) [12]


> Nucer   (16.12.09 20:23) [3]

Спасибо за помощь!!!


MBo   (2009-12-16 20:27:00) [13]

Ценихелп,источникзнаний
блин,пробелсломался:(


Nucer   (2009-12-16 20:23:00) [14]

 TMyItems = class
 private
   ...
   function GetItem(Index: Integer): TMyItem;
 public
   property Items[Index: Integer]: TMyItem read GetItem; default;
   ...
 end;


S-C-L   (2009-12-16 20:21:00) [15]

Да.
Нужно сделать класс со свойством-массивом.
чтобы к нему можно было обращаться

a := MyClass[num];

Ценю только дельные советы!


MBo   (2009-12-16 20:14:00) [16]

класс со свойством-массивом


Наверх

Титульная страница Поиск, карта сайта Написать письмо