Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: solinac en 23 Noviembre 2013, 02:23 am



Título: [?] Necesito ayuda con sobrecarga de operador +=
Publicado por: solinac en 23 Noviembre 2013, 02:23 am
Hola, estoy haciendo un programa donde tengo que sobrecargar los operadores [] y += para sumar 4 numeros, pero no logro hacerlo, la suma me da igual a 0.

Ojala que me puedan ayudar para saber que estoy haciendo mal.

Cabecera:
Código:
#ifndef PERSONA_H
#define PERSONA_H

#include <iostream>
using namespace std;

class alumno:public persona
{
public:
friend class maestro;
alumno();
~alumno();
alumno(int&);
alumno(const int&);
int &operator[](int n);
alumno &operator[](alumno n);
int operator <=(alumno a);
int operator / (int n);
friend ostream& operator<< (ostream & salida,const alumno & a);
friend istream& operator>> (istream & entrada, alumno & a);
friend alumno & operator+=(const alumno a, const alumno b);
friend alumno & operator+=(const alumno & a, int o);
friend alumno & operator+=(int o, const alumno &b);
/*friend alumno & operator+(const alumno &a, const alumno &b);*/

protected:
int cal;
int pr;
int c[4];
int x;
int y;
int *ip;
};

#endif

Funciones:
Código:
alumno::alumno()
{
cal=0;
c[1]=0,c[2]=0,c[3]=0,c[4]=0;
x=0;
}

alumno::alumno(int& dato)
{
c[1]=dato;
c[2]=dato;
c[3]=dato;
c[4]=dato;
}


alumno::~alumno(){}

int & alumno::operator[](int n)
{
//cout<<"usamos operador []"<<endl;
return c[n];
}

ostream & operator<< (ostream & salida,const alumno & a)
{

salida << a.c[1];

//cout<<"usamos operador <<"<<endl;

return salida;
}

istream & operator>> (istream & entrada, alumno & a)
{   

entrada >> a.x;
//cout<<"usamos operador >>"<<endl;
return entrada;
}

alumno & operator+=(const alumno  a, const alumno b)
{
alumno t;
t.x = a.x + b.x;
cout<<"usamos operador +="<<endl;
return t;

}

alumno & operator+=(const alumno & a, int o)
{
alumno t;
t.x = a.x + o;
cout<<"usamos operador +="<<endl;
return t;

}

alumno & operator+=(int o,const alumno & b)
{
alumno t;
t.x = o + b.x;
cout<<"usamos operador +="<<endl;
return t;

}

main:
Código:
main:
[code]
#include <iostream>
#include "persona.h"

using namespace std;

int main()
{
alumno a1;
alumno alumno1,alumno2,alumno3,alumno4;
alumno A,B;

cout<<"Ingresa la calificacion de los parciales: \n";

cin>>a1[1];
cin>>a1[2];
cin>>a1[3];
cin>>a1[4];
system("cls");

alumno1=a1[1];
alumno2=a1[2];
alumno3=a1[3];
alumno4=a1[4];

cout<<"Parcial 1: "<<alumno1<<endl;
cout<<"Parcial 2: "<<alumno2<<endl;
cout<<"Parcial 3: "<<alumno3<<endl;
cout<<"Parcial 4: "<<alumno4<<endl;

//Esta es la suma que no me sale:
B=alumno1 += alumno2;

cout<<"Suma: "<<B<<endl;



system ("pause");
}

Muchas gracias de antemano
[/code]


Título: Re: [?] Necesito ayuda con sobrecarga de operador +=
Publicado por: do-while en 25 Noviembre 2013, 20:57 pm
¡Buenas!

Creo que el error está aquí:
Código
  1. alumno1=a1[1];
  2. alumno2=a1[2];
  3. alumno3=a1[3];
  4. alumno4=a1[4];
  5.  

Estás asignando objetos enteros a objetos de tipo alumno. No se si el compilador que utilizas llamara directamente al constructor de conversión o si espera que el operador de asignación esté sobrecargado... De todas formas el constructor de conversión que utilizas está modificando el vector de la clase, no la variable que utilizas para obtener el valor de la operacion +=

Otro error que estás cometiendo es que consideras subindices en un rango 1-4 para un vector de cuatro elementos. Los subindices deberian estar entre 0 y 3.

Cambia esto y nos cuentas.

¡Saludos!