Ir para conteúdo
Fórum Script Brasil
  • 0

Erro ao sobrecarregar operador +


Castro

Pergunta

:(

Vejam o erro de compilação do programa. Estou tentando sobrecarregar o operador +

#include <iostream>
#include <cstdlib>
using namespace std;

class Sobrecarga
{
  private:
    double x,y,n,temp; 
public:
    Sobrecarga(double num);
    //Operadores unários
    Sobrecarga& operator++(int);
    Sobrecarga& operator++(); 
    Sobrecarga& operator--(int);
    Sobrecarga& operator--();
    //Operador binnario  
    Sobrecarga& operator+(Sobrecarga s1);
};
Sobrecarga::Sobrecarga(double num)
{
    n = num;
}
Sobrecarga& Sobrecarga::operator+(Sobrecarga s1)
{
    Sobrecarga temp;
    temp.x= x + s1.x;
    temp.y= y + s1.y;
 return temp;
}    


int main()
{
    cout << "sobrecarga de operadores " << endl;
    
     Sobrecarga a(6.0);
    a++;
    return 0;
}
As linhas marcadas como erradas pelo compilador são:
Sobrecarga::Sobrecarga(double num)
E
Sobrecarga temp;

Erros:

Sobrecarga_operador.cpp:56:13: error: no matching function for call to 'Sobrecarga::Sobrecarga()'

Sobrecarga_operador.cpp:56:13: note: candidates are:

Sobrecarga_operador.cpp:22:1: note: Sobrecarga::Sobrecarga(double)

Sobrecarga_operador.cpp:22:1: note: candidate expects 1 argument, 0 provided

Sobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&)

Sobrecarga_operador.cpp:6:7: note: candidate expects 1 argument, 0 provided

Sobrecarga_operador.cpp:56:13: warning: reference to local variable 'temp' returned [enabled by default]

Obrigado

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Amigo, você apenas declarou a sobrecarga dos operadores ++ e -- sem usá-los. Para sobrecarregar os operadores de incremento e decremento, deve-se fazer da seguinte maneira:

Deve se declarar assim:

void operator++(void)
Recebendo parâmetro void (o retorno pode ser definido por você), se você quiser sobrecarregar o pré-incremento:
++a
Agora para sobrecarregar o pós-incremento, você deve declarar assim:
void operator++(int numero)
Recebendo um inteiro como parâmetro (o retorno pode ser definido por você) para que seja utilizado o pré-incremento:
a++

O mesmo vale para o decremento.

Obs.: Não são todos os compiladores que permitem sobrecarregar os operadores de incremento e decremento (nota de alguns livros).

Outra: Jamais retorne uma referência de variáveis criadas dentro de funções (a última mensagem do compilador postada por você refere-se a isso) e atributos privados da classe.

Uma vez retornada uma referência de variáveis locais de uma função, corre o risco de alguém manipular o endereço de memória da variável, que está destruída porque a função não está executando.

Quanto aos atributos privados, você dá a rotinas externas ao objeto o poder de acessar o atrubuto do seu objeto, o que jamais pode acontecer!

Espero ter ajudado!

Editado por bruce845
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...