Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Portuguese
Section

Abrangência
Versão 17.3.1.0 e superiores

Section
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.




Bloco de código
languagecpp
firstline1
titleSobrecarga.tlpp
linenumberstrue
#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 ClsTeste1

return self



method create(parm1, parm2)
	self:a := parm1
	self:b := parm2
return self


//esse será o método invocado ao executar a soma de um objeto do tipo ClsTeste1 com qualquer outro tipo
operator Add(parm1) class ClsTeste1
	local ret := ComplexNumber():New()
	ret:a := self:a + parm1:a
	ret:b := self:b + parm1:b
return ret

operator Sub(parm1) class ClsTeste1
	local ret := ComplexNumber():New()
	ret:a := self:a - parm1:a
	ret:b := self:b - parm1:b
return ret


operator CompareMult(parm1) class ClsTeste1
conout("cheguei no Compare")
	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 ClsTeste1
//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 ClsTeste1
return cValtoChar(self:a) + " + " + cValToChar(self:b) + "toStringi"

user function teste2exemploComplex()
local i
local tempo
local obj := ClsTeste1ComplexNumber():NewCreate(1, 2)
local obj2 := ClsTeste1ComplexNumber():NewCreate(3, 4)
local objRet
objobjRet := obj + obj2
conout(objRet)
objobjRet := obj - obj2
obj := obj + 1
objconout(objRet)
objRet := obj - 1
if (obj <= obj2)* obj2
conout("oioi"objRet)
endif
if (obj <= 1obj2)
	conout("oioié menor")
endif
conout(obj)
conout(cvaltochar(obj))
return