Jump to content
Fórum Script Brasil
  • 0

Erro ao sobrecarregar operador +


Castro

Question

:(

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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!

Edited by bruce845
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...