Sobrecarga

Eu programo C++ e estou iniciando no mundo java. E fiquei com a seguinte dúvida: em java existe sobrecarga de operador como em C++? Não né?! Como faço para suprir essa necessidade? Só com herança?!

Valeu pessoal!

nao existe… com assim usar heranca pra suprir sobrecarga de operador?? crie um metodo… ao inves de

c = a + b

faca

c = a.add(b)

Olá

Levi, estudei C++ logo que foi lançado e poucas vezes vi vantagens na sobrecarga de operadores. Já li que sua maior serventia aparece nos softwares científicos. Mas para mim ele torna o código muito dificil de ser lido, fica tudo parecendo código de concurso de Perl mais obscuro (acreditem, existia este concurso).

Dê um exemplo onde seu uso em C++ é absolutamente indispensável para ver se a gente consegue uma alternativa Java mais fácil de ler.

[]s
Luca

Eu acho que o Sérgio já deixou claro. Eu estava pensando no caso de uma classe Matriz, por exemplo, aí na hora de fazer a multiplicação. Acho que por estar acostumado a programar em C++ eu acho mais fácil e legivel sobrecarregar o operador de multiplicação. Mas funciona perfeitamente fazer um método… Questão de costume. Se eu me deparar com alguma situação em que eu esteja realmente “viciado” em sobrecarregar e não encontrar uma solução em java, eu volto a perguntar. Minha intenção é sair fora do C mesmo, eu quero programar JAVA! heheheheehehehe :smiley:

valeu pessoal, brigadão!

[quote=“Luca”]Olá

Dê um exemplo onde seu uso em C++ é absolutamente indispensável para ver se a gente consegue uma alternativa Java mais fácil de ler.

[]s
Luca[/quote]

Sobrecarga de operadores é muito legal, e util, para 5 operadores: ‘[]’ ‘()’, ‘->’, ‘=’ e ‘==’. Luca, não vejo necessidade de dizer quão uteis eles são. Especialmente para programação genérica, os dois primeiros permitem misturar tipos primitivos e objetos de uma forma muito elegante.

Os demais operadores são uteis quando voce quer desenvolver uma mini ‘domain specific language’ usando C++. De fato acredito que se não for para isso é uma tremenda burrice.

‘new’ eh um operador que eu sempre sonhei em poder sobrecarregar… no Groovy, se nao me engano, dah :smiley:

louds, tem como vc passar pra gente um exemplo de código que a sobrecarga de um desses 5 operadores é essencial? E como seria a solução em JAVA tão elegante quanto a sugeriada em C++?

Nao existe nenhum caso onde sobrecarga de operadores eh “essencial”, mas existem diversos casos onde eh “mais elegante” usar. Por isso nao foi incluso no Java, ja que a ideia fundamental da coisa era ser uma linguagem pequena o suficiente para ser extremamente facil de aprender. Por isso as mudancas da JDK 1.5 demoraram tanto pra vir – até todo mundo se convencer de que realmente era necessário, precisamos do C# como competicao :smiley:

Vale lembrar que java e c++ são linguagens diferentes com necessidades diferentes. Então existem algumas afirmações que não valem entre ambas.

Vejamos, sobrecarregar ‘=’ e ‘==’ é fundamental para o bom comportamento da tua classe com a maioria de algoritmos e estruturas de dados da stl.

Acho que essa discussão de se PRECISA ou NÃO operator overloading é besteira. Nenhum acrecenta a semantica da linguagem. Apesar do uso racional aumentar a legibilidade do código.

List list = ...
return list[0];

Puxa, esse pedaço de código é perfeitamente claro, apenas de ser 0% mais funcional que:

List list = ...
return list.get(0);

Esse tipo de discução vai vir a tona com muito mais força caso entre em discução a possibilidade de se introduzirem properties em java.