Programar em C++/Sobrecarga de operadores: diferenças entre revisões

[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m "por traz" não existe.
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 12:
Digamos que temos uma classe chamada '''ponto''', que define dois inteiros para um plano hipoteticamente definido. Este par de inteiros poderá representar uma coordenada neste plano formado por pontos espaçados um do outro. Sob estas condições, cada objeto desta classe será uma coordenada neste plano:
 
<sourcesyntaxhighlight lang=cpp>
class ponto
{
Linha 24:
}
};
</syntaxhighlight>
</source>
 
Se quisermos operar estes objetos não teremos como fazê-lo, pois não há meios de operar os objetos do tipo ''ponto''. Nenhuma operação é possivel, pois a linguagem não define como operá-los. Cabe ao programador dizer ao compilador como ele deve efetuar a operação do novo tipo criado.
 
<sourcesyntaxhighlight lang=cpp>
ponto p1(1,5), p2(3,4), Soma;
 
Soma = p1 + p2;
</syntaxhighlight>
</source>
 
Ao tentar compilar este trecho de código o compilador retornará um erro por não conhecer a maneira de como operar este tipo de dado. Como criamos o tipo de dado, precisamos definir como fazer a soma do mesmo. Podemos fazer a seguinte definição:
 
<sourcesyntaxhighlight lang = cpp>
class ponto
{
Linha 58:
return ponto(a, b);
}
</syntaxhighlight>
</source>
 
A sintaxe desta definição, muitas vezes causa confusão, mas poderá ser facilmente entendida depois que tenhamos assimilado as idéias básicas por trás dela. Ela opera, aparentemente, apenas um dado de entrada, porém o operador deve somar dois. Como isto é possível? Observando mais atentamente o código poderemos entender: