Перегрузка операторов
Перегрузка операторов может быть полезна для улучшения читабельности кода.
Унарные операторы
Операторы сравнения
| op | opfunc |
| == | opEquals |
| != | opEquals |
| < | opCmp |
| <= | opCmp |
| > | opCmp |
| >= | opCmp |
Выражение a == b будет переписано как a.opEquals(b) и b.opEquals(a). != рассматривается аналогично.
Метод OpEquals должен быть реализован на возвращение bool.
Операторы присваивания
| op | opfunc |
| = | opAssign |
| += | opAddAssign |
| -= | opSubAssign |
| *= | opMulAssign |
| /= | opDivAssign |
| %= | opModAssign |
| &= | opAndAssign |
| |= | opOrAssign |
| ^= | opXorAssign |
| <<= | opShlAssign |
| >>= | opShrAssign |
| >>>= | opUShrAssign |
Выражение a op b переписывается как a.opfunc(b).
Оператор присваивания может осуществляется следующим образом:
obj@ opAssign(const obj &in other)
{
// Осуществляем присвоение
...
// Возвращяем хендл на себя
return this;
}
По умолчанию оператор присваивания скриптового класса делает побитовую копию содержания класса, так что если вас это устраивает,
то нет необходимости для написания своей реализации этого метода.
Бинарные операторы
| op | opfunc | opfunc_r |
| + | opAdd | opAdd_r |
| - | opSub | opSub_r |
| * | opMul | opMul_r |
| / | opDiv | opDiv_r |
| % | opMod | opMod_r |
| & | opAnd | opAnd_r |
| | | opOr | opOr_r |
| ^ | opXor | opXor_r |
| << | opShl | opShl_r |
| >> | opShr | opShr_r |
| >>> | opUShr | opUShr_r |