Sobrecarga de operadores

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

Curso de java básico (scjp)
Métodos y parámetros.
Clases en C++.
Definición de Clases y Variables de referencia.
Creación y destrucción de objetos
Lenguaje de programación Java
Ejemplo de Programa C++
A partir del lenguaje C Entorno de programación Visual C++
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
Procesadores de Lenguajes I
Informática II Prof. Dr. Gustavo Patiño MJ
INFORMATICA I Funciones CLASE 13.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Programación Gráfica 3. Introducción a C++..
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Encapsulamiento y Abstracción
Programación Orientada a Objetos en Java
SOBRECARGA DE FUNCIONES
Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;
Acciones y funciones Concepto
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
4A4A4A4A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
Programación Orientada a Objetos usando C++
Lic. Rosemary Torrico Bascopé
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
 2003 Prentice Hall, Inc. All rights reserved. 1 Capítulo 6: Clases y Abstracción de Datos Índice del capítulo 6.1 Introducción 6.2 Estructuras 6.3 Clases.
Lenguaje C++ Ana Lilia Laureano-Cruces
Introducción a los punteros
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
Programación III Clase 06 Funciones.
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 PROYECTOS EN C++
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Programación Orientada a Objetos
Manejo de Punteros y objetos en memoria dinámica en C++
Elementos básicos del lenguaje
Elementos básicos del lenguaje
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
TEMA IMPLEMENTACION DE LEGUAJES ORIENTADOS A OBJETO
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Sesión 09: Sobrecarga (1) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Detalles Generales sobre Java
Sesión 12: Herencia (2) – herencia múltiple /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Sesión 10: Sobrecarga (2) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
INTRODUCCION A LA PROGRAMACION
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
LENGUAJE “C” Programación.
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
Corporación Universitaria del Caribe CECAR Fundamentos de programación II.
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Clases “ Es una Abstracción de un elemento del mundo real ”
1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Constructores Los constructores inicializan nuestra clase, le dan un estado inicial estable listo para su uso. Siempre que declarábamos una variable numérica.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada HERENCIA Tema: HERENCIA Ing. Javier Chamorro Cerón.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Transcripción de la presentación:

Sobrecarga de operadores Programación Orientada a Objetos

Operadores sobrecargables El lenguaje C++ permite la sobrecarga de operadores Se pueden sobrecargar todos los operadores unitarios o binarios excepto: “#”, “##”, “.”, “:”, “.*” o “?”. La sintaxis para sobrecargar operadores en la siguiente: Sobrecarga de operadores binarios fuera de una clase <tipo> operator<operador binario>(lista de parámetros); Sobrecarga de operadores binarios dentro de una clase <tipo> nombre_clase::operator<operador unario>(lista de parámetros);

Racional con sobrecarga de operadores class Racional{ int num,den; public: Racional(){num = 0;den = 1;}; Racional(int a){num = a;den = 1;}; Racional(int a,int b){num = a;den = b;}; Racional operator+(Racional a); Racional operator-(Racional a); Racional operator*(Racional a); Racional operator/(Racional a); void escribe(); };

Implementación #include <iostream> #include "racional.h" using namespace std; Racional Racional::operator+(Racional a) { Racional r; r.num = num*a.den+den*a.num; r.den = den*a.den; return r; }

Racional Racional::operator-(Racional a) { r.num = num*a.den-den*a.num; r.den = den*a.den; return r; } Racional Racional::operator*(Racional a) { r.num = num*a.num;

Racional Racional::operator/(Racional a) { r.num = num*a.den; r.den = den*a.num; return r; } void Racional::escribe(){ cout << num << "/" << den << "\n";

Alternativa usando this Se puede utilizar el apuntador this para evitar el uso de una variable temporal: Racional Racional::operator+(Racional a) { this->num=this->num*a.den+this-> den*a.num; this->den=this-> en*a.den; return *this; } De la misma forma los demás métodos.

Sobrecarga de operadores fuera de una clase Podemos sobrecargar operadores fuera de una clase. La sobrecarga debe hacerse en el mismo archivo.

Ejemplo class Racional{ public: int num,den; Racional(){num = 0;den = 1;}; Racional(int a){num = a;den = 1;}; Racional(int a,int b){num = a;den = b;}; void escribe(){std::cout<<num<<"/"<< den << "\n";}; }; Racional& operator+(const Racional &a,const Racional &b) { return *(new Racional(b.num*a.den+b. den*a.num, b.den*a.den)); }

Algunas anotaciones sobre = Al sobrecargar el signo igual “=“, MyClass & operator=(const MyClass &rhs); tome en cuenta lo siguiente: Se regresa una referencia MyClass para permitir encadenamiento: a = b = c = d; Ojo con las auto asignaciones, a = a. MyClass & operator=(const MyClass &rhs){ if(this != rhs){//hacer la asignación } return *this;

Operadores relacionales El operador == se sobrecarga fácilmente ya que regresan un booleano.

Sobrecarga de operadores unitarios La sobrecarga de operadores unitarios no requiere la especificación de parámetros ya que el operador se aplica sobre el objeto que utiliza el operador. Para distinguir entre un operador prefijo y posfijo se le agrega un parámetro int al método posfijo.

Algunas notas sobre la clase Racional Note que la asignación Racional a(1,2); a = a+1; Suma 1/1 al racional, esto debido a que existe el constructor con un parámetro que crea un Racional con denominador 1, este Racional es el que se suma a a. Sin embargo lo siguiente no funciona porque el compilador no sabe que hacer con la asignación Racional a(1); int b; b = a;

Operadores de conversión La sintaxis para sobre cargar un operador de conversión es la siguiente operator <tipo> () No requiere especificar el tipo ya que el tipo regresado es el que se especifica. Además no se requiere argumentos ya que se aplican al objeto involucrado.