Estado |
---|
subtle | true |
---|
colour | Green |
---|
title | tlpp - language |
---|
|
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
...
Abrangência
Versão 17.3.1.0 e superiores
...
Assim como em outras linguagens modernas, TLPP permite que uma aplicação estabeleça um comportamento particular para operações entre dois objetos.
Isso significa que tendo dois objetos, obj1 e obj2, por exemplo, pode-se realizar operações do tipo: obj1 + obj2 obj1 - obj2 obj1 * obj2 obj1 / obj2 obj1 == obj2
Adicionalmente, também é possível oferecer uma string resultante quando um objeto for empregado em contexto textual, como, por exemplo, fazer um conout do objeto: conout(obj1). A sintaxe de sobrecarga reserva a palavra OPERATOR para esse propósito, sendo antecedida de ADD, SUB, MULT, DIV, COMPARE ou TOSTRING, naturalmente conduzindo à uma das sobrecargas mencionadas acima.
Assim sendo, não é permitido que o nome do método seja iniciado com o prefixo "operator". |
Bloco de código |
---|
language | cpp |
---|
firstline | 1 |
---|
title | Sobrecarga.tlpp |
---|
linenumbers | true |
---|
| #include " |
|
...
...
...
...
...
...
...
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
|
|
...
...
Method create(parm1, parm2) class ComplexNumber
|
|
...
...
...
...
...
Esse será o método invocado ao executar a soma de |
|
...
...
...
Operator Add(parm1) class ComplexNumber
|
|
...
Local ret := ComplexNumber():New()
|
|
...
ret:a := self:a + parm1:a
|
|
...
ret:b := self:b + parm1:b
|
|
...
...
Operator Sub(parm1) class ComplexNumber
|
|
...
Local ret := ComplexNumber():New()
|
|
...
ret:a := self:a - parm1:a
|
|
...
ret:b := self:b - parm1:b
|
|
...
...
Operator Mult(parm1) class ComplexNumber
|
|
...
Local ret := ComplexNumber():New()
|
|
...
ret:a := self:a * parm1:a - (self:b |
|
...
...
ret:b := (self:a * parm1:b) + (self:b * parm1:a)
|
|
...
...
...
Div(parm1) class ComplexNumber
|
|
...
Local conj := ComplexNumber():New()
Local ret := ComplexNumber():New()
// Conjugado do denominador
conj:a := parm1:a
conj:b := - parm1:b
// Multipica numerador e denominador pelo conjugado
ret := self * conj
conj := parm1 * conj
// Divide o resultado da multiplicacao do numerador pela parte real do denominador
ret:a := ret:a / conj:a
ret:b := ret:b / conj:a
Return ret
Operator Compare(parm1) class ComplexNumber
If (self:a |
|
...
...
...
...
EndIf
If (self:a < parm1:a .OR. self:b < parm1:b)
|
|
...
...
...
Operator ToString() class ComplexNumber
|
|
...
Return cValtoChar(self:a) + " + " + cValToChar(self:b) + "i"
|
|
...
Function U_ComplexNumber() |
|
...
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)
objRet := obj / obj2
|
|
...
...
...
conout("Eu vi que o primeiro objeto é menor do que o segundo")
|
|
...
Resultado do Exemplo4 + 6i -2 + -2i -5 + 10i
|
...
Abrangência
...
0.44 + 0.08i Eu vi que o primeiro objeto é menor do que o segundo
|