El lenguaje C++ Isidro González Caballero (Universidad de Oviedo) Técnicas de Comp. en Física Santander, 13/12/2010 2.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Curso de java básico (scjp)
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Creación y destrucción de objetos
Clase 3: Punteros y Referencias
Tipos de Datos Básicos y Estructurados
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.
Informática II Prof. Dr. Gustavo Patiño MJ
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Objetos y Clases en Java
Programación Orientada a Objetos en Java
Unidad 3 Punteros.
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Vectores en java.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Herencia e Interfaces.
Programación Orientada a Objetos usando C++
Modificadores.
POO Java Módulo 3 Elementos de programas Identificadores
Lic. Rosemary Torrico Bascopé
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.
SCJP Sun Certified Programmer for Java 6
Introducción a los punteros
El lenguaje de programación Java
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Clase 10: Estructuras de datos y arreglos.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
1 Objetos y Clases en Java ELO-329: Diseño y Programación Orientados a Objetos.
El lenguaje de programación C - Vectores y matrices -
Aplicación de estructuras de datos
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Herramientas de polimorfismo y herencia en C++
Manejo de Punteros y objetos en memoria dinámica en C++
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Elementos básicos del lenguaje
Unidad II Introducción a la programación en C++
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Informática Ingeniería en Electrónica y Automática Industrial
Programación en C para electrónicos
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.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
APUNTADORES.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Computación II Capitulo VII Punteros. Presentación de la unidad Objetivos: –Ser capaces de utilizar punteros. –Comprender las relaciones entre punteros,
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Introducción a la programación Orientada a Objetos y el C++ Isidro González Caballero ( Técnicas Experimentales.
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
MEMORIA DINÁMICA.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Clases “ Es una Abstracción de un elemento del mundo real ”
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
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.
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.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
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.
Transcripción de la presentación:

El lenguaje C++ Isidro González Caballero (Universidad de Oviedo) Técnicas de Comp. en Física Santander, 13/12/2010 2

Clases class MiClase { public: MiClase(...); //Constructor ~MiClase(); //Destructor //Metodos int metodo1(...); //ejemplo protected: //Data members int dato1; //ejemplo float dato2; //ejemplo }; MiClase es el nombre de la clase Visibilidad: public: Visible para cualquier otra clase protected: Visible solo para subclases private: Visible solo para la propia clase Datos: Definen el estado de los objetos de esta clase

Clases class MiClase { public: MiClase(...); //Constructor ~MiClase(); //Destructor //Metodos int metodo1(...); //ejemplo protected: //Data members int dato1; //ejemplo float dato2; //ejemplo }; Constructor: Puede haber varios Puede tomar argumentos Es la función que se ejecuta cuando se crea un objeto Destructor: Solo puede haber uno No toma argumentos Es lo último que se ejecuta cuando se destruye un objeto Métodos: Definen el comportamiento de una clase

Objetos de una clase Los objetos de una clase se declaran: – Como cualquier variable si hay constructor que no toma argumentos – Pasándole los parámetros del constructor a la variable como si fuera una función Los métodos se acceden usando el operador punto (.) (o flecha, ->, para punteros) class MiClase { public: MiClase(int a=0); bool foo() {return true;} }; MiClase miobj; //== miobj(0) MiClase miobj3(3); miobj.foo(); //true

class Complex { public: Complex(double re, double im); ~Complex(); double getRe() const; double getIm() const; double getModulo() const; … void setRe(double re); void setIm(double im); protected: //Data members double Real; //parte real double imaginario; //parte imaginaria }; Ejemplo: Clase complejo Parte pública: Accesible a todo el mundo Nombre de la clase Parte protegida: Accesible a las subclases Suele contener los atributos No olvidéis el punto y coma

class Complex { public: Complex(double re, double im); ~Complex(); double getRe() const; double getIm() const; double getModulo() const; … void setRe(double re); void setIm(double im); protected: //Data members double Real; //parte real double imaginario; //parte imaginaria }; Destructor Ejemplo: Clase complejo Get methods: Permiten averiguar información sobre el objeto Constructor Set methods: Permiten modificar el estado del objeto Atributo: Parte real Atributo: Parte imaginaria

class Complex { public: Complex(double re, double im); ~Complex(); double getRe() const; double getIm() const; double getModulo() const; … void setRe(double re); void setIm(double im); protected: //Data members double Real; //parte real double imaginario; //parte imaginaria }; Para recuperar la parte imaginaria: acceso directo a los data members Ejemplo: Clase complejo Const methods: Sólo pueden utilizarse con objetos constantes Para modificar la parte real Para recuperar el módulo: hay que calcularlo a partir de los atributos (oculto a los usuarios de la clase) Para modificar la parte imaginaria

Ejemplo: Clase complejo tar xvfz complejo1.tar.gz La clase Complex está… – …declarada en el fichero Complex.hh – … implementada en el fichero Complex.cc Vemos como crear objetos de la clase Complex en el fichero main.cc – Usamos una función para “imprimir” los objetos de la clase Complex : void PrintComplex(const Complex&); Compilamos con compila.csh Argumento por referencia constante: Nos ahorramos una copia de memoria Nos aseguramos que la variable no se modifica

Sobrecarga de operadores Permite redefinir cómo actúan los operadores sobre los objetos de nuestras clases Se suelen definir dentro de la propia clase – Salvo casos específicos (operadores >) – Hay que tener cuidado con cuestiones como la conmutatividad Son funciones o métodos como cualquier otro con nombres un poco especiales La expresión: objA + objB se transforma en: objA.operator+(objB) o se transforma en: operator+(objA, objB)

Ejemplo 2: Complex avanzado unzip complejo2.zip Observar: – Constructor con valores por defecto – Sobrecarga de operadores en la clase – Sobrecarga del operador << Complex.hh contiene la declaración y Complex.cc contiene la implementación main.cc contiene un ejemplo de utilización – No usamos ninguna función para imprimir el complejo… usamos el operador!

Ejercicios propuestos Sobrecargar el operador / y el operador -= Obligatorio: Sobrecargar el operardor lógico de igualdad: – Complex == Complex a==b; //Igual que lo de abajo a.operator==(b); //(a==b)->t/f Opcional: Redefinir el operador de entrada >> Obligatorio: Implementar una clase “vector en el plano”

Constructor: Algo más Al construir un objeto de una clase se reserva el espacio para sus data members – Con sus valores por defecto (si los tienen) A continuación le asignamos valores… – … luego estamos haciendo 2 asignaciones – … lo cual no es muy eficiente Se soluciona con la siguiente notación (ejemplo Complex ): Complex::Complex(double r, double i): Re(r), Im(i) {//…}

Punteros (¿qué son?) Almacenan direcciones de memoria Se utilizan en general para – Gestionar dinámicamente (en tiempo de ejecución en lugar de en tiempo de compilación) memoria Arrays de dimensión variable – Pasar argumentos por referencia a los métodos (aunque no es necesario) – Inclusión de objetos por referencia. Una misma copia de un objeto puede estar en varios objetos Si se modifica en uno de ellos se modifica en todos. – Cadenas de caracteres Los arrays son equivalentes a punteros

Punteros (utilización) Se declaran con un asterisco (‘ * ’) después del tipo Cuando no apuntan a ningún sitio su valor es 0 – Ojo: No es su valor por defecto. ¡Se debe inicializarlos! Se accede al objeto al que apuntan poniendo un ‘ * ’ delante del nombre del puntero Se accede a la posición de memoria de un objeto poniendo ‘&’ delante de su nombre El acceso a los métodos del objeto apuntado por un puntero se hace con el operador ‘->’ Cadenas de caracteres: – Son de tipo char* – Se inicializan con una cadena entre comillas – Su dimensión es el número de caracteres + 1 (\0, terminación de cadena)

Punteros (ejemplos) int *intptr; //Declaracion de un puntero int* intptr2; //Idem double pi = ; double *piptr = π //piptr apunta a pi //Las dos lineas siguientes imprimen lo mismo cout << “El valor de pi es “ << pi << endl; cout << “El valor de pi es “ << *piptr << endl; double otro = *piptr; //otro toma el valor de pi (no dir) otro = 6.28; //pi sigue valiendo lo mismo y piptr tambien piptr = &otro; //piptr ahora apunta a otro cout << “El valor de pi es “ << *piptr << endl; //6.28 int miarray[] = {1, 2, 3}; //Inicialización int uno = *miarray; //uno == 1

Gestión dinámica de memoria Utilizamos los operadores new (para crear nuevo espacio) y delete (para liberar el espacio creado) – En general por cada new que pongamos tendremos un delete en algún sitio Soportan la posibilidad de crear arrays – Tipo* variable = new Tipo[dimension]; – A partir de este momento se puede usar la sintaxis de arrays – delete[] variable;  Muy importantes los corchetes Si no se usan solo se libera el espacio del primer elemento

Gestión dinámica de memoria (ejemplo) Miclase* miclasePtr = 0; //Con inicialización miclasePtr = new Miclase(…) //Creamos un nuevo objeto Miclase miclasePtr->AlgunMetodo(…); //Acceso a AlgunMetodo() delete miclasePtr; //Liberamos la memoria de miclasePtr int nelems; … double nums[nelems]; //ERROR: dim desconocida al compilar double* nums = new double[nelems]; //Reservamos memoria for (unsigned int i = 0; i < nelems; i++) nums[i] = i*10; //Esto imprime ‘El cuarto elemento vale: 30’ cout << “El cuarto elemento vale: “ << nums[3] << endl; delete[] nums; //Liberando la memoria

Ejemplo: realvector unzip realvector1.zip Definimos una clase RealVector : – Array cuya dimensión puede decidirse en tiempo de ejecución – Reserva/borra memoria al crearse/destruirse – Acceso y modificación con el operador [ ] – Mismo operador const y no const … correr y ver los problemas… – Borramos 2 veces lo mismo… – …operador de asignación por defecto