Estado |
---|
subtle | true |
---|
colour | Green |
---|
title | tlpp - language |
---|
|
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
A partir da versão 19.3.1.0 será possível sobrecarregar operadores. Isso é na definição da sua classe você poderá sobrecarregar o comportamento da Soma (ADD), da Subtração (SUB), da Multiplicação (MULT), da Divisão (DIV), da Comparação (COMPARE) e da Conversão para String (TOSTRING).
Não é permitido declarar operadores que não sejam os citados acima, ou seja, os tokens add, sub, mult, div, compare e tostring fazem parte da linguagem e só eles poderão ser utilizados.
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 |
|
...
Bloco de código |
---|
language | cpp |
---|
firstline | 1 |
---|
title | Sobrecarga.tlpp |
---|
linenumbers | true |
---|
| #include "tlpp- |
|
...
...
...
...
...
...
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 * parm1:b)
|
|
...
ret:b := (self:a * parm1:b) + (self:b * parm1:a)
|
|
...
...
Operator Div(parm1) class ComplexNumber
|
|
...
Local conj := ComplexNumber():New()
|
|
...
Local ret := ComplexNumber():New()
|
|
...
// Conjugado do denominador
|
|
...
...
...
// Multipica numerador e denominador pelo conjugado
|
|
...
...
...
// Divide o resultado da multiplicacao do numerador pela parte real do denominador
|
|
...
...
...
...
Operator Compare(parm1) class ComplexNumber
|
|
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
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 0.44 + 0.08i
|
...
Abrangência
...
Eu vi que o primeiro objeto é menor do que o segundo
|