Guia Laboratorio 8

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 con funciones 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(){} // constructor punto(int i, int j){x=i; y=j;}//constructor void get_xy(int &i, int &j){i=x; j=y;} //sobrecarga funcion operadora miembro punto operator+(punto p2); }; //sobrecarga de + relacionada con la clase punto punto 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 =

Transcript of Guia Laboratorio 8

Page 1: Guia Laboratorio 8

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

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

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

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

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

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

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.