Castro Posted April 6, 2012 Report Share Posted April 6, 2012 :( 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 providedSobrecarga_operador.cpp:6:7: note: Sobrecarga::Sobrecarga(const Sobrecarga&)Sobrecarga_operador.cpp:6:7: note: candidate expects 1 argument, 0 providedSobrecarga_operador.cpp:56:13: warning: reference to local variable 'temp' returned [enabled by default]Obrigado Quote Link to comment Share on other sites More sharing options...
0 bruce845 Posted April 14, 2012 Report Share Posted April 14, 2012 (edited) 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 April 14, 2012 by bruce845 Quote Link to comment Share on other sites More sharing options...
Question
Castro
:(
Vejam o erro de compilação do programa. Estou tentando sobrecarregar o operador +
As linhas marcadas como erradas pelo compilador são: EErros:
Obrigado
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.