Peixoto 0 Denunciar post Postado Janeiro 18, 2012 :upset: Preciso entender sobrecarga de operadores em C++. Os textos explicativos e exemplos dos livros do Herbert Schildt e DEITEL são horríveis, neste tema, complicados e sem didática . Eu precisava de um exemplo simples com a explicação de como se sobrecarrega este operadores. Uma espécie de passo a passo. Sei que há operadores que não podem ser sobrecarregados. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Janeiro 18, 2012 http://www.cplusplus.com/doc/tutorial/classes2/ Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Janeiro 19, 2012 Vi a página indicada, mas ainda sim achei tão complicado quanto nos citados livros. há uma mistura de C e C++no exemplo. Algu´m teria alguma experiência pessoal no tema ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Janeiro 19, 2012 Eu já fiz algumas coisas com isso, mas não lembro muito bem. Eu lembro que ++ e -- eram especiais. O ++/-- prefixo era fácil de implementar, mas o que vem após a variável não era tão simples. Procure no google "Examples of ++ overload C++" Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Janeiro 19, 2012 Ja edito tentando dar uma explicação Edit: ++objeto para carregar como membro <classe> &operator++(); //extritamente de pré-incremento para carregar como nao-membro friend <classe> &operator++(<classe> &); objeto++ para carregar como membro <classe> operator++(int); //extritamente de pós-incremento para carregar nao-membro firend <classe> operator++(<classe> &,int); como implementar como membro ++objeto <classe> &<classe>::operator++() { //incrementa o que quiser return *this;//retorna um lvalue } objeto++ <classe> <classe>::operator++(int) //nao envie nada, pois este int o proprio compilador vai enviar e vai ser usado somente para diferenciar o pós-incremento do pré-incremento { <classe> temp = *this; temp.variavel//incrementa o que quiser return temp; } Para nao membros a base é a mesma então não vou escrever Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Janeiro 22, 2012 :upset: Rapaz !!! Para mim que estou tateando no tema, o exemplo está complicado. Vamos partir do seguinte modelo: tipo-retorno nome-classe : : perator +(lista-argumento){ // operações } 1- Considerando o modelo acima, qual código devo colocar no corpo da função para sobrecarregar o operador adição na função ? 2 - como chamar a função de sobrecarga em main() ? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Janeiro 23, 2012 tipo-retorno nome-classe : : perator +(lista-argumento) { // operações //Insira as operacoes que deseja fazer utilizando o operador + //Exemplo: variavel++; } Para chamar na main use tipo objeto = tipo-objeto + tipo-objeto, no caso do operador +; Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Janeiro 23, 2012 Desculpe abusar, mas estou com tanto bloqueio no tema, acho tão abstrato, que gostaria de saber se você poderia escrever este exemplo. Sua ideia inicial foi boa. transformar + em ++. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Janeiro 23, 2012 Vou postar um código que fiz pra aprender isso: Exemplo de sobrecarga Eu uso codeblocks como compilador, já tem o projeto para codeblocks pronto, mas se quiser usar em outro compilador teria de criar um novo projeto e incluir o header e os dois .cpp Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Janeiro 24, 2012 Baixei seu arquivo “polinomio_8.19.rar”, embora tenha achado complexo, tentei produzir um código mais simples baseado em seu exemplo, que pudesse transformar + em ++. Durante compilação surgiram tantos erros, nem perco tempo em postar. Poderia(m) corrigir o programa ? #include <iostream> #include <cstdlib> using namespace std; class sobrecargaAD { private: double x; public: sobrecargaAD operator+(sobrecargaAD ad); }; sobrecargaAD sobrecargaAD::operator+(sobrecargaAD ad) { sobrecargaAD incrent; increment.x++; } int main() { cout << "sobrecarga do operador + para ++" << endl; sobrecargaAD incr (2): return 0; } Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Shurd 0 Denunciar post Postado Janeiro 24, 2012 Seguinte você esta tentando usar a sobrecarga de operador sem pensar no pra que ele serve. Sobrecarga de operadores serve para criar uma maneira de operar dois objetos e não simplesmente suas variáveis. O objetivo não é só somar a variável n com 3, é somar a variável n com a n de outro objeto de modo controlado. Deste modo quando for feito objeto1 + objeto2, como foi você quem fez a programação do operador + para este objeto você tem certeza do que está ocorrendo ao fazer esta operação. Compartilhar este post Link para o post Compartilhar em outros sites
Peixoto 0 Denunciar post Postado Janeiro 25, 2012 :( Certo. O problema é que eu não estou conseguindo visualizar este processo de construção. Os livros dizem que você pode sobrecarregar um objeto para fazer algo diferente, desde que não contrarie sua natureza. Assim sendo transformar subtração em adição seria um absurdo. No seu exemplo você sobrecarregou vários operadores para fazer algo. É este “algo” que não estou sabendo implementar fisicamente, para o exemplo ficar simples e claro. Dentro dessa visão “livresca”, sou levado a crê que posso transforma + em ++, mas a coisa não é tão simples como nos livros. Se você pudesse ajeitar o meu código para que ele rodasse agradeço. Com ele funcionando poderei vislumbrar outras cituações Obrigado Compartilhar este post Link para o post Compartilhar em outros sites