Guia Laboratorio 8
-
Upload
eduin-arango-caccha -
Category
Documents
-
view
4 -
download
0
Transcript of Guia Laboratorio 8
![Page 1: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/1.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 1/7
1/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
GUIA DE LABORATORIO Nº 8
PROGRAMACION ORIENTADA AL OBJETO
OBJETIVOS
1. Entender y aplicar la sobrecarga de operadores con funciones operadoras y confunciones amigas.2. Conocer la herencia, clases base y clases derivadas.
SOBRECARGA DE OPERADORES
Ejem 1.// sobrecarga del operador +#include <iostream>class punto{
int x, y; public: punto(){}// constructorpunto(int i, int j){x=i; y=j;}//constructorvoid get_xy(int &i, int &j){i=x; j=y;}//sobrecarga funcion operadora miembropunto operator+(punto p2);
};
//sobrecarga de + relacionada con la clase puntopunto punto::operator+(punto p2){
punto temp;temp.x = x + p2.x;temp.y = y + p2.y;return temp; //devuelve un objeto de tipo punto
}
int main(){
int x,y,r,s;cout<<”Ingrese la coordenadas del primer punto:”;cin>>x>>y;cout<<”Ingrese la coordenadas del segundo punto:”;cin>>r>>s;
punto p1(x,y),p2(r,s),p3;int x, y;p3 = p1 + p2; //suma de dos objetos y llamada a operator+()p3.get_xy(x,y); cout<<"(p1 + p2) = p3 , X: "<<x<<", Y: "<<y<<endl;
}
Ejem 2.// sobrecarga de los operadores - y el =
![Page 2: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/2.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 2/7
2/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
#include <iostream>class punto{ int x, y;public: punto(){} // constructorpunto(int i, int j){x=i; y=j;} // constructor
void get_xy(int &i, int &j){i=x; j=y;}punto operator+(punto p2);punto operator-(punto p2);punto operator=(punto p2);};//sobrecarga de + relacionada con la clase puntopunto punto::operator+(punto p2){
punto temp;temp.x=x+p2.x;temp.y=y+p2.y;return temp; //devuelve un objeto de tipo punto
}//sobrecarga de - relacionada con la clase puntopunto punto::operator-(punto p2){
punto temp;temp.x=x-p2.x;temp.y=y-p2.y;return temp; //devuelve un objeto de tipo punto
}//sobrecarga de = relacionada con la clase puntopunto punto::operator=(punto p2){
x=p2.x;y=p2.y;//devolucion del objeto que se asignareturn *this;
}
int main(){ int x,y,r,s;
cout<<”Ingrese la coordenadas del primer punto:”;cin>>x>>y;cout<<”Ingrese la coordenadas del segundo punto:”;cin>>r>>s;
punto p1(x,y),p2(r,s),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;
![Page 3: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/3.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 3/7
3/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
}
Ejem 3.// sobrecarga del operador + para pi + int // asi como para pi+pi#include <iostream>
class punto{ int x, y; public:punto(){} // constructorpunto(int i, int j){x=i; y=j;} //constructorvoid get_xy(int &i, int &j){i=x; j=y;}punto operator+(punto p2); // pi + pipunto operator+(int i); // pi + int
};
//sobrecarga de + relacionada con la clase puntopunto punto::operator+(punto p2){
punto temp;temp.x=x+p2.x;temp.y=y+p2.y;return temp; //devuelve un objeto de tipo punto
}//sobrecarga de + para pi + intpunto punto::operator+(int i){
punto temp;// suma un valor entero a un objeto puntotemp.x=x+i;temp.y=y+i;return temp;
}
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 == // sobrecarga del operador &&#include <iostream>
![Page 4: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/4.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 4/7
4/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
const int FALSE=0, TRUE=1;class punto{ int x, y; public:
punto(){} // constructorpunto(int i, int j){x=i; y=j;} //constructor
void get_xy(int &i, int &j){i=x; j=y;}int operator==(punto p2); // pi == pjint operator&&(punto p2); // pi && pj
};
//sobrecarga de == relacionada con la clase puntoint punto::operator==(punto p2){
if (x==p2.x && y==p2.y)return TRUE;
elsereturn FALSE;
}//sobrecarga de && para la clase puntoint punto::operator&&(punto p2){
return ((x==p2.x) &&(y==p2.y))?TRUE:FALSE;}
int main(){
punto p1(10,15),p2(5,3),p3(5,3);int x, y;// operador ==if (p1==p2)
cout<<"p1 es igual que p2\n";else
cout<<"p1 no es igual que p2\n";
if (p2==p3)cout<<"p2 es igual que p3\n";
elsecout<<"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";
if (p2 && p3)cout<<"p2 && p3 es verdad\n";
![Page 5: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/5.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 5/7
5/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
elsecout<<"p2 && p3 no es verdad\n";
}
Ejem 5.
// sobrecarga de operadores unarios ++ y –#include <iostream>class punto{ int x, y; public:
punto(){} // constructorpunto(int i, int j){x=i; y=j;} //constructorvoid get_xy(int &i, int &j){i=x; j=y;}punto operator++(); // pi++punto operator--(); // pi--
};//sobrecarga de + relacionada con la clase puntopunto punto::operator++(){
x++;y++;//devolucion del objeto al cual se asignareturn *this;
}//sobrecarga de + para pi + intpunto punto::operator--(){
x--;y--;return *this;
}
int main(){
punto p1(5,3),p2(4,7);int x, y;++p1; //incremento en el objeto p1p1.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;
![Page 6: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/6.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 6/7
6/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
float imag;public :Complex() {} // constructorComplex(float,float); //constructor
void print(); Complex operator+(const Complex&);};Complex::Complex(float a,float b){
real=a;imag=b;
}void Complex::print(){
cout << real << " + i" << imag << endl;}
Complex Complex::operator+(const Complex& x){
return Complex(real+x.real,imag+x.imag);}
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();
}
Ejem 7.#include <iostream>class complex{
float real;float imag;public : complex() {} // constructorcomplex(float a,float b); // constructorvoid print();
//sobrecarga + con funcion amigafriend complex operator+(complex x,complex y);
};
![Page 7: Guia Laboratorio 8](https://reader030.fdocuments.co/reader030/viewer/2022020806/563db91e550346aa9a9a31b9/html5/thumbnails/7.jpg)
7/17/2019 Guia Laboratorio 8
http://slidepdf.com/reader/full/guia-laboratorio-8 7/7
7/7
Prof.: Ing. Felix Huari Curso: Algoritmos y Programación
complex::complex(float a,float b){
real=a;imag=b;
}
void complex::print(){ cout << real << " + i" << imag << endl; }complex operator+(complex x,complex y){
complex z;z.real=x.real+y.real;z.imag=x.imag+y.imag;return z;
}
//Progrma principalint 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 la resta,producto, división de objetos complejo. Resuelva con funciones operadorasmiembro.
2. Respecto al ejercicio anterior resuelva ahora con funciones operadorasamigas.
3. Escribir un programa que simule la hora del sistema, para ello sobrecargueel operador unario ++.
4. Escribir un programa que permita sobrecargar el operador && que permitaverificar si 2 fracciones son heterogéneas.