A partir da versão 17.3.1.0 será possível sobrecarregar operadores. Isso é na definição da sua classe você poderá sobrecarregar o comportamento da Soma, da Subtração, da Comparação e da Conversão para String.
Sobrecarga.tlpp
#include "msobject.ch" class ComplexNumber public data a public data b public method new() public method create(parm1, parm2) public OPERATOR Add (parm1) public OPERATOR Sub(parm1) public OPERATOR Mult(parm1) // public OPERATOR Div(parm1) public OPERATOR Compare(parm1) public OPERATOR ToString() endclass method new() class ComplexNumber return self method create(parm1, parm2) class ComplexNumber self:a := parm1 self:b := parm2 return self //esse será o método invocado ao executar a soma de um objeto do tipo ComplexNumber com qualquer outro tipo operator Add(parm1) class ComplexNumber local ret := ComplexNumber():New() ret:a := self:a + parm1:a ret:b := self:b + parm1:b return ret operator Sub(parm1) class ComplexNumber local ret := ComplexNumber():New() ret:a := self:a - parm1:a ret:b := self:b - parm1:b return ret operator Mult(parm1) class ComplexNumber local ret := ComplexNumber():New() ret:a := self:a * parm1:a - (self:b - parm1:b) ret:b := (self:a * parm1:b) + (self:b * parm1:a) return ret operator Compare(parm1) class ComplexNumber //retorna -1 se for menor, 0 se for igual e 1 se for maior if (self:a > parm1:a) return 1 endif if (self:a < parm1:a) return -1 endif if (self:b > parm1:b) return 1 endif if (self:b < parm1:b) return -1 endif return 0 operator ToString() class ComplexNumber return cValtoChar(self:a) + " + " + cValToChar(self:b) + "i" user function exemploComplex() local obj := ComplexNumber():Create(1, 2) local obj2 := ComplexNumber():Create(3, 4) local objRet objRet := obj + obj2 conout(objRet) objRet := obj - obj2 conout(objRet) objRet := obj * obj2 conout(objRet) if (obj < obj2) conout("é menor") endif return
Resultado do Exemplo
4 + 6i
-2 + -2i
-5 + 10i
É menor
Abrangência
17.3.1.0
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas