Sobre Carga de Operadores

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

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

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

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

Tema: Plantillas en C++.

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

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

Clases y Objetos en C++

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Curso de Java Introducción a la Programación II

Implementación de las Clases Pila, Cola, Lista y Arbol

PHP orientado a objetos:

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

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

4. Operadores Operador asignación

APUNTES PROII 2º PARCIAL.

Programación orientada a objetos I

Programación Orientada a Objetos en C++

Tema: Sobrecarga de Operadores.

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Elementos de un programa en C

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

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Programación Estructurada

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Construcciones del Lenguaje Java

Bloque II. Elementos del lenguaje de programación Java

OPERADORES Y EXPRESIONES

Punteros y Memoria Dinámica II

INTERACCION ENTRE OBJETOS

SESIÓN DE EJERCICIOS E1

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

LISTAS ENLAZADAS DOBLES C++

Programación. Test Autoevaluación Tema 3

INTRODUCCIÓN A LA POO EN C++

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

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

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Guía práctica de estudio 04: Clases y objetos

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

PROGRAMACION ESTRUCTURADA: Tema 3. Funciones

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Tema 2. El lenguaje de programación Java (Parte 1)

Las clases como tipos de datos definidos por el usuario

Lección 2 Introducción al lenguaje C

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Conceptos Básicos. Programación Orientada a Objetos 2

Java. Introducción a la Programación Orientada a Objetos

Tema: Arreglos de Objetos en C++.

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.

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Prueba N o 1. Programación II

Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

o Una clase es un tipo al cual pertenecen objetos o instancias de la clase.

Lenguaje de programación C. Introducción

Estructura de datos y Programación

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

Funciones Tipos de funciones y Recursividad

TEMA 3:Programación con Clases y Objetos.

Cómo implementar tus propias funciones en Lenguaje C?

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

Las plantillas permiten definir funciones genéricas.

Prof. Dr. Paul Bustamante

Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Programación PHP. orientada a formularios DISEÑOS CURRICULARES CON ENFOQUE POR COMPETENCIAS LABORALES

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

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

4/14/2010. Objetivos. Que es JAVA. JAVA como plataforma. Reglas Sintácticas y de Codificación Básicas de JAVA

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

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

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

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

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

Apuntadores (Punteros)

Transcripción:

Programación Orientada o Objetos Univesidad de Los Andes - Facultad de Ingeniería Escuela de Sistemas Programación Digital II Profesor: Gilberto Diaz gilberto@ula.ve

Las operaciones tradicionales que se encuentran presentes en sentencias sencillas como la de asiganación NombreClase obj1, obj2; obj2 = obj1 No se pueden realizar cuando se tienen objetos con atributos distintos a los tipos de datos comunes.

Es muy importante mantener una notación consisa para las operaciones más comunes: Suma Resta Multiplicación División, etc

C++ soporta una serie de operadores para los tipos de datos que vienen incorporados en el lenguaje. Sin embargo, para Clases definidas por el usuario, donde se realizan operaciones como: Aritmética compleja Álgebra matricial Señales lógicas Cadenas de caracteres C++ no puede darle soporte directo

Como ejemplo veamos la clase Matriz (Matriz.h) #ifndef MATRIZ_H #define MATRIZ_H class Matriz { private: int filas, columnas; float **elementos; public: //Constructores //Métodos de acceso... //Métodos de modificación... //Métodos miscelaneos void sumarmatrices(matriz); //Destructor ;

Como ejemplo veamos la clase Matriz (Matriz.cpp) #include Matriz.h... void Matriz :: sumarmatrices(matriz m){ int i,j; if ( filas == m.filas && columnas == m.columnas ){ for(i=0; i<m.filas; i++) for(j=0; j<m.columnas; j++) elementos[i][j] += m.elementos[i][j];

Como ejemplo veamos la clase Matriz (Principal.cpp) #include Matriz.h int main(){ Matriz m1(2, 2), m2(2, 2), m3; m1.inicializar(2.0); m2.inicializar(2.0); m2.sumarmatrices(m1);

La idea es mantener, como dijimos al principio una notación sencilla, es decir, utilizar una sentencia como esta: Matriz m1(2, 2), m2(2, 2), m3;.. m3 = m1 + m2;

Para ello, C++ proporciona una manera de cambiar el comportamiento original de los operadores que tiene incorporado el lenguaje. A esto se le llama sobrecarga de operadores. En nuestro ejemplo debemos sobrecargar dos operadores: '=' y '+' para poder construir sentencias como m3 = m1 + m2

En el operador de asignación (=) estan presentes dos operandos. En el caso de la clase Matriz, la operación tiene dos objetos de esta clase: m2 = m1 Operando Izquierdo Operador Operando derecho

C++ utiliza métodos para cambiar el comportamiento original de un operador. Estos métodos tienen el siguiente formato: tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método TipoDato operator operador (parámetros){ sentencias; return TipoDato;

En nuestro ejemplo de la operación de asignación para la clase Matriz, este método es de la siguiente manera: tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

El argumento representa el operando derecho. m2 = m1; tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

El apuntador a objeto this representa el operando izquierdo. m2 = m1; tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

El objeto que invoca el método es el operando izquierdo (this) m2 = m1; tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

El resultado es una Matriz m2 = m1; tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

En este caso particular se retorna el objeto *this pues él mismo es el que recibe el resultado. m2 = m1; tipo de dato del palabra operador argumentos resultado reservada a sobrecargar del método Matriz operator = (const Matriz& m){ this->filas = m.filas;... return *this;

La implementación es como sigue: (Matriz.h) #ifndef MATRIZ_H #define MATRIZ_H class Matriz { private: int filas, columnas; float **elementos; public: //Constructores //Métodos de acceso... //Métodos de modificación... //Métodos miscelaneos void sumarmatrices(matriz); Matriz operator = (const Matriz&); //Destructor ;

La implementación es como sigue: (Matriz.cpp) Matriz Matriz :: operator = (const Matriz& mat){ int i,j; if(this->filas!= 0 this->columnas!= 0) delete [] this->elementos; this->filas = mat.filas; this->columnas = mat.columnas; this->elementos = new float * [this->filas*this->columnas]; for(i=0; i<this->filas; i++){ this->elementos[i] = new float[columnas]; for(j=0; j<this->columnas; j++) this->elementos[i][j] = mat.elementos[i][j]; return *this;

Ahora tenemos la posibilidad de utilizar una sentencia sencilla y natural. (Principal.cpp) #include Matriz.h int main(){ Matriz m1(2, 2), m2(2, 2), m3; m1.inicializar(2.0); m2.inicializar(2.0); m3 = m1;

Implementación del operador suma (+) (Matriz.h) #ifndef MATRIZ_H #define MATRIZ_H class Matriz { private: int filas, columnas; float **elementos; public:... //Métodos miscelaneos void sumarmatrices(matriz); Matriz operator = (const Matriz&); Matriz operator + (const Matriz&); //Destructor ;

La implementación es como sigue: (Matriz.cpp) Matriz Matriz :: operator + (const Matriz& m){ int i,j; if(this->filas==m.filas && this->columnas==m.columnas ){ Matriz res(m); for(i=0; i<m.filas; i++) for(j=0; j<m.columnas; j++) res.elementos[i][j] += this->elementos[i][j]; return res; else{ Matriz res; return res;

En el caso del operador de suma el resultado no se almacena en ninguno de los operandos involucrados. Por esta razón, se debe crear un nuevo objeto tipo Matriz el cual se almacenará en un tercer objeto del mismo tipo. m3 = m1 + m2

Por eso se crea una nuevo objeto que se retorna: (Matriz.cpp) Matriz Matriz :: operator + (const Matriz& m){ int i,j; if(this->filas==m.filas && this->columnas==m.columnas ){ Matriz res(m); for(i=0; i<m.filas; i++) for(j=0; j<m.columnas; j++) res.elementos[i][j] += this->elementos[i][j]; return res; else{ Matriz res; return res;

Ahora tenemos la posibilidad de utilizar una sentencia sencilla y natural. (Principal.cpp) #include Matriz.h int main(){ Matriz m1(2, 2), m2(2, 2), m3; m1.inicializar(2.0); m2.inicializar(2.0); m3 = m1 + m2;

Tarea: Fecha de entrega: Domingo 1ro de Mayo hasta las 8:00 pm Sobrecargar los siguientes operadores: Resta: - Multiplicación: * Inversa:!