Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Peixoto

Sobrecarga de operadores -- ++ - + etc.

Recommended Posts

: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

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

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

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

: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

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

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

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

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

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

:(

 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.