P.O.O - Sobrecarga de Operadores
P.O.O - Sobrecarga de Operadores
P.O.O - Sobrecarga de Operadores
GUIA DE LABORATORIO Nº 13
SOBRECARGA DE OPERADORES
OBJETIVO
Entender y aplicar la sobrecarga de operadores con funciones operadoras y con
funciones amigas.
Ejem 1.
// sobrecarga del operador +
#include <iostream>
class punto
{ private:
int x, y;
public:
punto();// constructor por defecto
punto(int i, int j); //Constructor con parametros
void get_xy(int &i, int &j);
punto operator+(punto p2); //sobrecarga funcion operadora miembro
friend void Print(punto z);
};
punto::punto(int i, int j)
{x=i; y=j;
}
void Print(punto z)
{ cout<<"(p1 + p2) = p3 , X: "<<z.x<<", Y: "<<z.y<<endl;
}
Ejem 2.
// sobrecarga de los operadores +, - y el =
#include <iostream>
class punto
{ int x, y;
public:
punto();// constructor por defecto
punto(int i, int j); //Constructor con parametros
void get_xy(int &i, int &j);
punto operator+(punto p2);
punto operator-(punto p2);
punto operator=(punto p2);
};
//Funciones miembro
punto::punto()
{ x=0; y=0;
}
punto::punto(int i, int j)
{x=i; y=j;
}
//Funcion principal
int main()
{ int x1,y1,x2,y2,x,y;
cout<<”Ingrese la coordenadas del primer punto:”;cin>>x>>y;
cout<<”Ingrese la coordenadas del segundo punto:”;cin>>r>>s;
punto p1(x1,y1),p2(x2,y2),p3;
p3=p1+p2; //suma de dos objetos y llamada a operator+()
p3.get_xy(x,y); cout<<"(p1+p2)= X: "<<x<<", Y: "<<y<<endl;
p3=p1-p2; //resta de dos objetos y llamada a operator-()
p3.get_xy(x,y); cout<<"(p1-p2)= X: "<<x<<", Y: "<<y<<endl;
p3=p1; //asignacion de un objeto y llamada a operator=()
p3.get_xy(x,y); cout<<"(p3=p1)= X: "<<x<<", Y: "<<y<<endl;
}
Ejem 3.
#include <iostream>
class punto
{ int x, y;
public:
punto(); // constructor
punto(int i, int j); //constructor con parametros
void get_xy(int &i, int &j);
punto operator+(punto p2);
//Funciones miembro
punto::punto()
{ x=0; y=0;
}
punto::punto(int i, int j)
{x=i; y=j;
}
punto punto::operator+(int i)
{ punto temp;
// suma un valor entero a un objeto punto
temp.x=x+i;
temp.y=y+i;
return temp;
}
//Funcion principal
int main()
{
punto p1(3,5),p2(2,1),p3;
int x, y;
p3=p1+p2; //suma de dos objetos y llamada a operator+()
p3.get_xy(x,y); cout<<"(p1+p2) X: "<<x<<", Y: "<<y<<endl;
p3=p1+5; //suma de objeto + entero y llamada a operator+(int)
p3.get_xy(x,y); cout<<"(p1+5) X: "<<x<<", Y: "<<y<<endl;
p1=p1+p2+p3; //suma de tres objetos y llamada a operator+()
p1.get_xy(x,y); cout<<"(p1+p2+p3) X: "<<x<<", Y: "<<y<<endl;
}
Ejem 4.
// sobrecarga del operador == y &&
#include <iostream>
const int FALSE=0, TRUE=1;
class punto
{ int x, y;
public:
punto(); // constructor
punto(int i, int j); //constructor con parametros
void get_xy(int &i, int &j);
int operator ==(punto p2);
int operator &&(punto p2);
};
//Funciones miembro
punto::punto()
{ x=0; y=0;
}
punto::punto(int i, int j)
{x=i; y=j;
}
//Funcion principal
int main()
{
punto p1(10,15),p2(5,3),p3(5,3);
int x, y;
// operador ==
if (p1==p2)
if (p2==p3)
cout<<"p2 es igual que p3\n";
else
cout<<"p2 no es igual que p3\n";
// operador &&
if (p1 && p2)
cout<<"p1 && p2 es verdad\n";
else
cout<<"p1 && p2 no es verdad\n";
Ejem 5.
// sobrecarga de operadores unarios ++ y –
#include <iostream>
class punto
{ int x, y;
public:
punto()]; // constructor
punto(int i, int j); //constructor con parametros
void get_xy(int &i, int &j);
punto operator++();
punto operator--();
};
//Funciones miembro
punto::punto()
{ x=0; y=0;
}
punto::punto(int i, int j)
{x=i; y=j;
}
//Funcion principal
int main()
{
punto p1(5,3),p2(4,7);
int x, y;
++p1; //incremento en el objeto p1
p1.get_xy(x,y); cout<<"(++p1)= X: "<<x<<", Y: "<<y<<endl;
--p2; //decremento en el objeto p2
--p2;
p2.get_xy(x,y); cout<<"(--p2)= X: "<<x<<", Y: "<<y<<endl;
}
Ejem 6.
#include <iostream>
class complex
{ float real;
float imag;
public :
complex();// constructor
complex(float a,float b); // constructor con parametros
void print();
friend complex operator+(complex x,complex y); //sobrecarga + con funcion amiga
};
//Funciones miembro
complex::complex(float a,float b)
{ real=0;
imag=0;
}
complex::complex(float a,float b)
{ real=a;
imag=b;
}
void complex::print()
{ cout << real << " + i" << imag << endl;
}
//Progrma principal
int main()
{ complex x(1.0,3.0),y(2.0,1.0); complex z;
x.print();
cout << " + " << endl;
y.print();
z=x+y;
cout << " = " << endl;
z.print();
}
PROBLEMAS PROPUESTOS
1. Sobrecargue la clase Complex para permitir operaciones como el producto,
división de objetos complejo. Resuelva con funciones operadoras miembro.
2. Respecto al ejercicio anterior resuelva ahora con funciones operadoras
amigas.
3. Escribir un programa que simule la hora del sistema, para ello sobrecargue
el operador unario ++.
4. Escribir un programa que permita sobrecargar el operador && que permita
verificar si 2 fracciones son heterogéneas.
5. Dado una clase llamada fecha cuyos atributos son d, m, a y además dia,
mes y anyo. En la primera se almacena la fecha actual y en los otros se
almacena la fecha del dia siguiente. Implementar el programa para
sobrecargara los siguientes operadores:
a) Sobrecargar el operador ^ que genere la fecha del dia siguiente.
b) Sobrecargar el operado / que permita leer la fecha actual, se sabe que
esta función es amiga.
c) Sobrecargar el operador [] que permita validar la fecha actual, si la fecha
es correcta retorna true, caso contrario retorna false.
d) Sobrecargar el operador >= que permita mostrar las dos fechas.
6. Dado una clase llamado Number que tiene como atributos una dato tipo
entero y una cadena. En el primero se almacena el número entero y en el
segundo se almacena el equivalente en numeración romana. Cree las
funciones sobrecargadas necesarias y la función principal.