DE HOJA INGENIERO EN COMPUTACIÓN ESIME CULHUACAN ESTRUCTURADA FECHA DIA NOMBRE DEL ALUMNO 4 1 MES AÑO ASIGNATURA Apellido paterno No. BOLETA PROGRAMACION ORIENTADA A OBJETOS Nombre (s) Apellido materno GRUPO PROFESOR ING. R. OSORNIO PRÁCTICA No. 18 POLIMORFISMO PARTE II I.- OBJETIVO: Al término de la practica el alumno podrá: - Hacer programas con polimorfismo II.- MATERIAL Y EQUIPO: 1 1 1 1 1 EQUIPO DE CÓMPUTO CPU Marca_____________ Mod. _________________ N°. ______________ Monitor Marca_____________ Mod. _________________ N° ______________ Teclado Marca_____________ Mod. _________________ N°. ______________ DISKETE DE 3.5 “ III.- INTRODUCCIÓN TEÓRICA. Operadores sobrecargados Análogamente a las funciones sobrecargadas, los operadores también pueden sobrecargarse. En realidad la mayoría de los operadores en C++ están sobrecargados. Por ejemplo el operador + realiza distintas acciones cuando los operandos son enteros, o en coma flotante. En otros casos esto es más evidente, por ejemplo el operador * se puede usar como operador de multiplicación o como operador de indirección. C++ permite al programador sobrecargar a su vez los operadores para sus propios usos. LABORATORIO DE PROGRAMACION ORIENTADA A OBJETOS ROS PRACTICA 18 PAGINA 1 Sintaxis: Prototipo: <tipo> operator <operador> (<argumentos>); Definición: <tipo> operator <operador> (<argumentos>) { <sentencias>; } También existen algunas limitaciones para la sobrecarga de operadores: Se pueden sobrecargar todos los operadores excepto ".", ".*", "::" y "?:". Los operadores "=", "[]", "->", "()", "new" y "delete", sólo pueden ser sobrecargados cuando se definen como miembros de una clase. Los argumentos deben ser tipos enumerados o estructurados: struct, union o class. Sobrecarga de operadores binarios: Empezaremos por los operadores binarios, que como recordarás son aquellos que requieren dos operandos, como la suma o la resta. Existe una diferencia entre la sobrecarga de operadores que vimos, que se definía fuera de las clases. Cuando se sobrecargan operadores en el interior se asume que el primer operando es el propio objeto de la clase donde se define el operador. Debido a esto, sólo se necesita especificar un operando. Sintaxis: <tipo> operator<operador binario>(<tipo> <identificador>); Normalmente el <tipo> es la clase para la que estamos sobrecargando el operador, tanto en el valor de retorno como en el parámetro. Operadores binarios que pueden sobrecargarse: Además del operador + pueden sobrecargarse prácticamente todos los operadores: +, -, *, /, %, ^, &, |, (,), <, >, <=, >=, <<, >>, ==, !=, &&, ||, =, +=. -=, *=, /=, %=, ^=,&=, |=, <<=,>>=, [], (),->, new y delete. Forma funcional de los operadores: Por supuesto también es posible usar la forma funcional de los operadores sobrecargados, aunque no es muy habitual ni aconsejable. En el caso del operador + las siguientes expresiones son equivalentes: T1 = T1.operator+(Ahora); T1 = Ahora + T1; LABORATORIO DE PROGRAMACION ORIENTADA A OBJETOS ROS PRACTICA 18 PAGINA 2 IV. DESARROLLO EL ALUMNO SEGUIRÁ LA SECUENCIA INDICADA, DESCRIBIENDO EN CADA INCISO LOS PASOS QUE SIGA: a) 4.1. Realice un programa con Programación orientada a objetos en C++ con Class: "PROGRAMA QUE sobrecargue el operador suma de 2 objetos (dato objeto debe tener un numero real y otro imaginario) LABORATORIO DE PROGRAMACION ORIENTADA A OBJETOS ROS PRACTICA 18 PAGINA 3 #include <iostream.h> #include <stdlib.h> class Tiempo { private: int hora; int minuto; public: Tiempo(int h=0, int m=0); void Mostrar(); Tiempo operator+(Tiempo h); }; Tiempo::Tiempo(int h, int m){ hora = h; minuto = m; } Tiempo Tiempo::operator+(Tiempo h){ Tiempo temp; temp.minuto = minuto + h.minuto; temp.hora = hora + h.hora; if(temp.minuto >= 60) { temp.minuto -= 60; temp.hora++; } return temp; } void Tiempo::Mostrar(){ cout << hora << ":" << minuto << endl; } int main() { Tiempo Ahora(12,24), T1(4,55), T3; T1 = Ahora + T1; T1.Mostrar(); T3 = Ahora.operator+ (T1); // otra forma de llamar a la sobrecarga T3.Mostrar(); //(Ahora + Tiempo(4,45)).Mostrar(); // otra forma de llamar a la sobrecarga system("PAUSE"); return 0; } // (1) V. CUESTIONARIO (TRABAJO COMPLEMENTARIO). 1. – ¿ Explique un operador sobrecargado ? 2.- ¿ Explique un operador sobrecargado binario? VI.- CONCLUSIONES Y OBSERVACIONES: LABORATORIO DE PROGRAMACION ORIENTADA A OBJETOS ROS PRACTICA 18 PAGINA 4