Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

Documentos relacionados
Tema: Sobrecarga de Operadores.

Tema: Punteros a Objetos. Puntero this.

Tema: Arreglos de Objetos en C++.

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Programación 1 Tema 3. Información, datos, operaciones y expresiones

APUNTES PROII 2º PARCIAL.

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Tema: Herencia Simple y Múltiple en C++.

Tema: Autómatas de Estado Finitos

Las plantillas permiten definir funciones genéricas.

Tema: Clases y Objetos en C++.

Tema: Tipos Abstractos de Datos (TAD s) en C++.

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Tema: Repaso sobre uso de Funciones, Arreglos y Punteros en C++.

2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

Taller #1 (versión del 18 de septiembre de 2009) Programación básica y aproximación al paradigma orientado a objetos

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

DII. 1. (5 Puntos) Dada la clase Punto con la siguiente interfaz ya implementada

Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara.

Tema 6: Memoria dinámica

Tema: Algoritmos para la ruta más corta en un Grafo.

Tema: Clases y Objetos en C++. Parte II.

Tema 6. Gestión dinámica de memoria

Tema: Tabla de Símbolos

Escuela Politécnica Superior de Elche

Tema: Funciones, Procedimientos y Recursividad en C#.

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Hoja de ejercicios del Tema 3

Tema 3. Tipos de datos simples

Lección 2 Introducción al lenguaje C

Tema: Clases y Objetos en C#. Parte II.

Tema: Estructuras de Selección en C#.

Principios de Computadoras II

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN.

Introducción rápida a la programación (estructurada ) con C++

El lenguaje C. 1. Identificadores, constantes y variables

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Tema: Análisis Sintáctico

Expresiones Aritméticas

Curso de Programación Avanzada en C

Introducción a C++ y Code::Blocks

Tema: Repaso sobre el uso del IDE de Microsoft Visual C#.

Introducción a clases en C++

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

TEMA 8: Gestión dinámica de memoria

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Repaso de las características más importantes de la programación Java y su adaptación a Android

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005

Necesidad de la herencia pertenencia variedad is a has a herencia variedad definir una clase modificando una o más clases añadir nuevos miembros

Tema: Patrones de Diseño.

Prof. Dr. Paul Bustamante

Apuntadores en C y C++

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Expresiones y sentencias

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

12 símbolos (13 si se incluye el espacio en blanco)

Definición y Conversión de datos. Agustín J. González ELO-329

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Polimorfismo. Métodos virtuales

REPRESENTACIÓN DE DATOS

Ejercicios propuestos de. Programación orientada a objetos. con C++ Cristina Cachero Pedro J. Ponce de León

Expresiones Lógicas y Operadores sobre Bits

4. Operadores Operador asignación

Tema: INTÉRPRETE ENSAMPOCO/3

ALMACENAMIENTO PERSISTENTE DE DATOS

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Unidad I Tipos de Datos en C

Las clases como tipos de datos definidos por el usuario

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Entrada y salida de datos en C y C++

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Tema: Herramientas UML, Análisis y diseño UML

Prof. Dr. Paul Bustamante

3.3 Conceptos Básicos del Lenguaje Java

Tema: Herramientas UML, Análisis y diseño UML

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Prof. Dr. Paul Bustamante

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Funciones. Parámetros por valor

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Operadores y Expresiones

Elementos léxicos del lenguaje de programación C

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Tema: Introducción al IDE de Microsoft Visual C#.

Estructuración del programa en partes más pequeñas y sencillas

Universidad Don Bosco (UDB) Facultad de Ingeniería / Escuela de Computación

Guía - Taller # 2 (JAVA)

Transcripción:

Programación II. Guía 8 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones. Objetivos Diferenciar sobrecarga de operadores binarios y unarios. Identificar cuando sobrecargar operadores. Implementar programas en C++ que sobrecarguen operadores unarios. Implementar programas en C++ que incluya sobrecarga de funciones Materiales y Equipo Computadora con el software DevC++ Guía Número 8 Introducción Sobrecarga de operadores unarios. Se conocen también como operadores unitarios. Un operador unitario es un operador que tiene un único operando, en otras palabras, es aquel que actúa sobre un único operando. El operador ++, por ejemplo es unario. Recordemos que los operadores unarios susceptibles de sobrecarga son: Operadores unarios + y - Operadores unarios de incremento ++ y decremento -- Operadores de puntero: referencia & e indirección * Operador de manejo de bits ("bitwise") complemento a uno ~ Operador de negación lógica! Asignación y desasignación dinámica de memoria: new y delete Consideremos una clase de tipo T y un objeto X de tipo T. Se define un operador unitario sobrecargado ++, entonces:

2 Programación II, Guía 8 ++X se interpreta como: ó como: X.operator ++ ( ) operator ++ (X) Un operador unario se puede definir así: Como una función de un argumento Como una función miembro sin argumento (el caso más frecuente) Nunca las dos a la vez. Sobrecarga de funciones o métodos. La sobrecarga de funciones es el proceso de definir dos o más funciones, con el mismo nombre, que difieren únicamente en los parámetros que requieren y en el tipo de resultado que generan. Este tipo de sobrecarga resulta ser una poderosa herramienta de programación. Sin embargo, debe ser cuidadoso su uso ya que si se utiliza excesivamente el programa podría resultar poco legible. Además, es importante considerar que no es posible definir dos funciones que difieran sólo en el tipo de resultado. Deben hacerlo también en la lista de parámetros. Cómo determina C++ la función sobrecargada correcta? Lo determina en base al número y tipo de parámetros pasados a la función sobrecargada. C++ requiere que al menos uno de los parámetros tenga un tipo diferente del que utilizan otras funciones. Por consiguiente, es válido declarar dos funciones sobrecargadas, tales como: int F (int a, int b, int c); int F (int a, int b, float c); C++ puede llamar a ambas funciones, ya que al menos uno de los valores de los parámetros tiene un tipo diferente. Sin embargo, si se intenta escribir una función sobrecargada que tenga tipos similares, C++ emitirá un error. Por ejemplo, las definiciones siguientes no se compilarán, ya que el compilador no diferenciará una de otra: int F (int a, int b, int c); int F (int a, int b, int c);

Programación II. Guía 8 3 La sobrecarga de funciones es un tipo específico de polimorfismo. El polimorfismo es una de las características fundamentales de la programación orientada a objetos. Las reglas que sigue C++ para seleccionar una función sobrecargada son: Si existe una correspondencia exacta entre los tipos de parámetros de la función llamadora y una función sobrecargada, se utiliza dicha función. Si no existe una correspondencia exacta, pero sí se produce la conversión de un tipo a un tipo superior (tal como un parámetro int a long, o un float a un double) y se produce, entonces, una correspondencia, se utilizará la función seleccionada. Si una función sobrecargada se define con un número variable de parámetros (mediante el uso de puntos suspensivos [ ]), se puede utilizar como una coincidencia potencial. Procedimiento Ejemplo 1: Los operadores de incremento y decremento suelen ser muy útiles en aplicaciones de tiempo o conteo. En el siguiente ejemplo, se muestra una clase Punto con operadores ++ y - - sobrecargados y con notaciones prefija y postfija, que realiza incrementos y decrementos de las coordenadas de cada punto. #include <iostream> using namespace std; class Punto { private: int CoordX; int CoordY; // Definición de la clase Punto // coordenada en eje x del punto // coordenada en eje y del punto public: Punto( ); Punto(int ValX, int ValY); ~Punto( ){ ; void FijarX (int ValX); void FijarY (int ValY); int LeerX( ); int LeerY( );

4 Programación II, Guía 8 /* Funciones para sobrecargar operadores de incremento y decremento en forma prefija y postfija */ Punto & operator ++( ); // Forma prefija Punto operator ++ (int); // Forma postfija Punto & operator --( ); // Forma prefija Punto operator -- (int); // Forma postfija ; // Definición de funciones miembro Punto::Punto( ) { CoordX = 0; CoordY = 0; Punto::Punto(int ValX, int ValY) { FijarX(ValX); FijarY(ValY); int Punto::LeerX( ) { return CoordX; int Punto::LeerY( ) { return CoordY; void Punto::FijarX(int ValX) { CoordX = ValX; void Punto::FijarY(int ValY) { CoordY = ValY; // Sobrecarga de operador de incremento forma prefija (++p) Punto & Punto::operator ++( ) { CoordX += 1; CoordY += 1; return *this; // Sobrecarga de operador de incremento forma postfija (p++) Punto Punto::operator ++(int) { CoordX += 1; CoordY += 1; return Punto(CoordX - 1, CoordY - 1);

// Sobrecarga de operador de decremento forma prefija (--p) Punto & Punto::operator --( ) { CoordX -= 1; CoordY -= 1; return *this; // Sobrecarga de operador de deremento forma postfija (p--) Punto Punto::operator --(int) { CoordX -= 1; CoordY -= 1; return Punto(CoordX + 1, CoordY + 1); int main() { Punto P(5, 7); Punto Q(1, 2); Punto R; Programación II. Guía 8 5 cout << Las coordenadas del punto P son ( " << P.LeerX() << ", " << P.LeerY() << " )" << endl; cout << "Las coordenadas del punto Q son ( " << Q.LeerX() << ", " << Q.LeerY() << " )" << endl; R = ++P; cout << endl << "Las coordenadas del punto ++P son ( " << R.LeerX() << ", " << R.LeerY() << " )" << endl; R = Q++; cout << endl << "Las coordenadas del punto Q++ son ( " << R.LeerX() << ", " << R.LeerY() << " )" << endl; R = --Q; cout << endl << "Las coordenadas del punto --Q son ( " << R.LeerX() << ", " << R.LeerY() << " )" << endl; R = P--; cout << endl << "Las coordenadas del punto P-- son ( " << R.LeerX() << ", " << R.LeerY() << " )" << endl; cout << endl << "Las coordenadas finales del punto P son ( " << P.LeerX() << ", " << P.LeerY() << " )" << endl; cout << endl << "Las coordenadas finales del punto Q son ( " << Q.LeerX() << ", " << Q.LeerY() << " )" << endl; system("pause>nul"); return 0;

6 Programación II, Guía 8 Ejemplo 2: En este ejemplo se sobrecarga una función de nombre Prueba para realizar tres operaciones totalmente diferentes. #include <iostream> using namespace std; // Prototipos de las funciones sobrecargadas int Prueba(int); int Prueba(int, int); float Prueba(float, float); int main() { int indice = 7; int x = 4, y = 5; float a= 6.5, b = 18.3; cout << "El cuadrado de " << indice << " es: " << Prueba(indice) << endl; cout << endl << "El producto de " << x << " por " << y << " es: " << Prueba(x,y) << endl; cout << endl << "La media de " << a << " y " << b << " es: " << Prueba(a, b) << endl; system("pause>nul"); return 0; // Definición de las funciones sobrecargadas int Prueba(int valor) entero { return (valor * valor); // La función Prueba calcula el cuadrado de un número int Prueba(int valor1, int valor2) // La función Prueba multiplica dos números enteros { return (valor1 * valor2); float Prueba(float valor1, float valor2) números reales { return ((valor1 * valor2)/2); // La función Prueba calcula la media de dos

Programación II. Guía 8 7 Análisis de Resultados Ejercicio 1: Con la clase Fecha proporcionada, crear un programa que utilice operadores de preincremento y postdecremento sobrecargados para sumar 1 al día en un objeto de tipo fecha, mientras que produce incrementos apropiados en el mes y el año, en caso de ser necesario. Además deben sobrecargarse el operador + para incrementar un número n de días a una determinada fecha; y el operador de flujos de salida para poder mostrar los objetos de tipo Fecha. Debe validarse los años bisiestos. La solución se debe manejar a través de un menú que contenga las siguientes opciones: a) Crear los objetos de tipo Fecha, solicitando los datos al usuario. b) Incrementar una fecha en un valor de n días. c) Prueba del operador preincremento. d) Prueba del operador postincremento. e) Salir de la aplicación. El menú deberá estar siempre activo, en la misma posición en pantalla, hasta que el usuario seleccione la opción salir. El programa debe estar debidamente comentado. class Fecha { private: int dia, mes, year; public: Fecha(int d = 1, int m = 1, int y = 1900); // constructor predeterminado ~Fecha( ) { ; void SetFecha(int, int, int); // Para establecer día, mes y año bool yearbisiesto(int); // Para verificar si la fecha es un año bisiesto bool findemes(int); // Para verificar si la fecha está en el fin de mes // Sobrecarga de operadores Fecha & operador ++( ); Fecha operador ++( ); Fecha & operador +(int); //Sobrecarga operador preincremento //Sobrecarga operador postincremento //Sobrecarga operador + para sumar n días al objeto

8 Programación II, Guía 8 ; friend ostream & operador << (ostream &, const Fecha &); // Sobrecarga operador de // flujo de salida Ejercicio 2: Crear un programa que incluya dos funciones sobrecargadas: Max: que permitirá encontrar el máximo entre dos números que pueden ser del tipo entero o real de precisión doble. Raiz: que permitirá calcular la raíz cuadrada de un número que puede ser del tipo entero o real de precisión doble. La funcionalidad debe implementarse con un menú con las siguientes opciones: Opción de menú 1: Encontrar el máximo de dos números introducidos por el usuario. Opción de menú 2: Calcular la raíz cuadrada de un número introducido por el usuario. Opción de menú 3: Salir del programa. El menú deberá estar siempre activo, en la misma posición en pantalla, hasta que el usuario seleccione la opción salir. El programa debe estar debidamente comentado.

Programación II. Guía 8 9 Guía 8: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones. Hoja de cotejo: 8 Alumno: Máquina No: Docente: GL: Fecha: EVALUACIÓN % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%