[?] Necesito ayuda con sobrecarga de operador +=

Iniciado por solinac, 23 Noviembre 2013, 02:23 AM

0 Miembros y 1 Visitante están viendo este tema.

solinac

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:

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

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:

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]

do-while

#1
¡Buenas!

Creo que el error está aquí:
Código (cpp) [Seleccionar]

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


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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!