Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: sobrecarga de operadores  (Leído 981 veces)
0 Usuarios y 1 Visitante están viendo este tema.
freedman
Wizard
****

Prestigio: 0
Desconectado Desconectado

Sexo: Masculino
Mensajes: 8



« en: 05/09/2007, 16:39:30 »


hola, estoy empezando con clases y sobrecarga de operadores.
quiero sobrecargar el operador '+' para poder sumar dos vectores (a,b)+(c,d) = (a+c , b+d)

para hacer lo que hice, me guie por lo que vi en tutoriales o manuales de C,
por lo que vi, hay que sobrecargar el operador '=' (¿siempre?) y obviamente el operador '+'
hay cosas que no entiendo bien todavia, que las hice pero sin saber porque...

bueno, el programa es este:

/* sobrecarga del operador + para sumar vectores (a,b) + (c,d) = (a+c , b+d) */

#include<iostream.h>
#include<conio.h>

class CVector
{   private:
   int x1,y1, x2,y2, x3,y3;

   public:
   void cargar_v1(int a, int b) {x1=a; y1=b;};
   void cargar_v2(int c, int d) {x2=c; y2=d;};
   CVector& operator = (CVector&);
   CVector  operator + (CVector&);
   int ver_comp_x(void);
   int ver_comp_y(void);
};

CVector& CVector::operator = (CVector& param)
{   x3=param.x3;
   y3=param.y3;
   return *this;
};

CVector CVector::operator + (CVector&)
{   CVector temp;
   temp.x3=x1+x2;
   temp.y3=y1+y2;
   return *this;
};

int CVector::ver_comp_x(void)
{   return x3;
};

int CVector::ver_comp_y(void)
{   return y3;
};

void main(void)
{   int aa,bb,cc,dd;
   CVector V1, V2;
   CVector V3;

   cout<<"\n (a,b) + (c,d) = (a+c , b+d)";
   cout<<"\n a= "; cin>>aa;
   cout<<"b= "; cin>>bb;
   cout<<"\n c= "; cin>>cc;
   cout<<"d= "; cin>>dd;

   V1.cargar_v1(aa,bb);
   V2.cargar_v2(cc,dd);
   V3=V1+V2;

   cout<<endl;
   cout<<"a+c= "<<V3.ver_comp_x();
   cout<<endl;
   cout<<"b+d= "<<V3.ver_comp_y();

   getch();
}


les agradeceria que me expliquen cual es el error/es.
como decia, lo que no entiendo bien, es la parte de:

CVector& operator = (CVector&);
CVector  operator + (CVector&);


no entiendo por qué los '&' en el tipo de funcion y en los parametros.
gracias de nuevo...
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 12/09/2007, 08:53:15 »

Buenas.

No entiendo el porqué de tantas variables miembro. El diseño no está pensado tomando en cuenta la sobrecarga de operadores, por lo que asumo una falta de entendimiento en dicho concepto.

Te muestro como sería una forma más correcta de realizar lo que estas buscando:

Código:
#include<iostream>

using namespace std;

class CVector
{
private:
    int x, y;
public:
    CVector()
    {
        this->x = 0;
        this->y = 0;
    };
    CVector(int x, int y)
    {
        this->x = x;
        this->y = y;
    };
    CVector& operator = (CVector v)
    {
        x = v.x;
        y = v.y;
        return *this;
    };
    CVector  operator + (CVector& v)
    {
        x = x + v.x;
        y = y + v.y;
        return *this;
    };
    int getX(void)
    {
        return x;
    };
    int getY(void)
    {
        return y;
    };
};




int main(void)
{
    int a, b, c, d;
    cout << "(a,b) + (c,d) = (a + c, b + d)" << endl;
    cout << "a = ";
    cin >> a;
    cout << "b = ";
    cin >> b;
    cout << "c = ";
    cin >> c;
    cout << "d = ";
    cin >> d;

    CVector V1(a, b), V2(c, d);
    CVector V3;
    V3 = V1 + V2;

    cout << endl << "a + c = " << V3.getX() << endl;
    cout << "b + d = " << V3.getY() << endl;
    system("pause");
    return 0;
}

Revisa el código, cualquier duda preguntá.
Saludos.
En línea

xlarsx
Guru
***

Prestigio: 0
Desconectado Desconectado

Título universitario: Mecatrónica
Profesión: Programador
Mensajes: 3



Lenguajes:
C, C++, J2SE, JSP
Bases de datos:
MS SQL Server
« Respuesta #2 en: 20/05/2008, 22:38:06 »

Normalmente se tiene esa notación por lo siguiente:
- En cuanto a los parámetros se usa esa notación para obtener el pase por referencia de los objetos de entrada y así poder modificarlos si es necesario, si no lo vas a hacer es recomendable que los pongas con la palabra clave const
- Y en cuanto a la salida de la función (lo que antecede a la palabra clave operator) puede ser cualquier objeto o elemento nativo, aunque se tiene pasar una referencia de tu mismo objeto para poder hacer con la respuesta alguna acción, por ejemplo:

Código:
std::cout << "a + c ="   << ( V3 = V1 + V2).getX() << std::endl;

Esperando la respuesta sea de utilidad, Saludos  Sonrisa
En línea
Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: