Ajuda - Busca - Membros - Calendário
Versão Completa: Erro ao sobrecarregar operador +
Fórum Script Brasil > Programação & Desenvolvimento > C, C++
Castro
sad.gif

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

CODE
#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:

CODE
Sobrecarga::Sobrecarga(double num)


E

CODE
Sobrecarga temp;


Erros:

QUOTE
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

bruce845
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:

CODE
void operator++(void)

Recebendo parâmetro void (o retorno pode ser definido por você), se você quiser sobrecarregar o pré-incremento:
CODE
++a


Agora para sobrecarregar o pós-incremento, você deve declarar assim:
CODE
void operator++(int numero)

Recebendo um inteiro como parâmetro (o retorno pode ser definido por você) para que seja utilizado o pré-incremento:
CODE
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!
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2013 Invision Power Services, Inc.