Lenguaje C GRANADOS PAREDES GIBRN Lenguajes de Programacin
Lenguaje C++ GRANADOS PAREDES GIBRÁN Lenguajes de Programación Dra. Ana Lilia Laureano Cruces
Lenguaje C++ Introducción • B. Stroustrup, mediados de los 80, AT&T • Paso de la programación tradicional (C) a estilos de abstracción de datos y orientación a objetos • Conserva características del C y añade nuevos conceptos
Lenguaje C++ Extensiones respecto al C • No orientadas a objeto • Orientadas a objetos
Lenguaje C++ Extensiones respecto al C • No orientadas a objeto – Mejoras en entrada/salida - streams – Sobrecarga de funciones y operadores – Parámetros por defecto. Referencias
Lenguaje C++ • Organización de programas – Ficheros de declaraciones (. h) • Del sistema • Del usuario (#ifndef. . #define. . . #endif) – Ficheros de código fuente (. cc, . cpp)
Lenguaje C++ • Scope (alcance) – Fichero: declaraciones que no pertenecen a función o clase alguna – Función: etiquetas – Local: cualquier nombre declarado en un bloque pertenece al bloque. – Clase: declaraciones asociadas a una clase • Cada variable tiene un “scope” o un contexto
Lenguaje C++ • Operadores y sentencias – Sentencias • Misma sintaxis y semántica que las de C – Operadores idem sentencias excepto: • new, delete[], : : • <<, >> • Sobrecarga
Lenguaje C++ Estructura básica de un programa #include<iostream. h> main() {//inicio cout << “Hello world”; }//fin
Lenguaje C++ Elementos del programa • • COMENTARIOS // Comentario de una sola línea /* Comentario multilínea */ BLOQUES DE CÓDIGO { Todos los bloques de código van entre corchetes } FIN DE LINEA Todas las instrucciones terminan con un punto y coma
Lenguaje C++ Tipo básico de datos • Tipo de dato bool tiene dos valores asociados true o false • DECLARACIÓN DE UNA VARIABLE • <Tipo de dato> Nombre_variable; • INICIALIZACION DE UNA VARIABLE • <Tipo de dato> Nombre_variable = [valor]; • EJEMPLO: • int variable 1; • bool variable 2=true;
Lenguaje C++ Tipo básico de datos • Variables y aritmética. • Todo nombre y/o expresión tiene un tipo. • El tipo determina las operaciones que se pueden realizar con el. • Conversiones implícitas. • En asignaciones y operaciones algebraicas el lenguaje lleva a cabo todas las conversiones implícitas que faciliten el uso y sean seguras.
Lenguaje C++ Arreglos • Un arreglo es un conjunto de tipos de datos básicos • DECLARACIÓN DE UN ARREGLO • <Tipo de dato básico> Nombre_variable[Número de elementos]; • INICIALIZACION DE UN ARREGLO • <Tipo de dato> Nombre_variable = {valor 1, valor 2, …, valor. N}]; • EJEMPLO: • char arreglo 1[10]; • float arreglo 2={1. 5, 2. 3, 6, 7};
Lenguaje C++ Arreglos Multidimencionales • DECLARACIÓN DE UN ARREGLO MULTIDIMENCIONAL • <Tipo de dato básico> Nombre_variable[Número de elementos][Numero de elementos]; • INICIALIZACION DE UN ARREGLO MULTIDIMENCIONAL • <Tipo de dato> Nombre_variable = { {valor 1, valor 2, …, valor. N}, {valor 1, valor 2, …, valor. N} }; • EJEMPLO: • char arreglo 1[10]; • int arreglo 2[]={{1, 2, 3}, {4, 5, 6}{7, 8, 9}};
Lenguaje C++ Apuntadores y vectores • Punteros y vectores. char v[10]; //vector de 10 caracteres (0 a 9) char *p; // puntero a un carácter p = &v[3]; //p apunta al cuarto elemento de v • punteros - operaciones asociadas – – int *p; //puntero a entero int **p; //puntero a entero int (*vp) [10]; //puntero a vector de 10 enteros int (*fp) ( char, char *); // puntero a función
Lenguaje C++ Tipos definidos por el usuario • ESTRUCTURAS (Registros) struct date_s { int day, month, year; } a. Date; La definición de arriba de a. Date es también la declaración de una estructura llamada date_s. Podemos definir otras variables de este tipo referenciando la estructura por el nombre: struct date_s another. Date; • Enumeraciones • Clases
Lenguaje C++ Instrucciones de control de flujo • EJEMPLO • for(int i=0; i<5; i++){ cout << “Hello world”<<i; • }
Lenguaje C++ Operadores Los operadores de incremento ++ y -- pueden ser explicados por medio del siguiente ejemplo. Si tienes la siguiente secuencia de instrucciones a = a + 1; b = a; Se puedes usar b = a++; b = ++a;
Lenguaje C++ Sobrecarga de operadores + - * / % ^ & | ~ ! = < > += -= *= |= << >> >>= <<= == != <= >= ->* -> , [ ] ( ) new[ ] delete No se sobrecargan: : : . . * /= %= ^= &= && || ++ -delete[ ]
Lenguaje C++ Sobrecarga de operadores class complex { double re, im; public: complex(double r, double i) : re(r), im(i){} complex operator+(complex); complex operator*(complex); bool operator==(complex); bool operator<(complex); }; void f() { complex a(1, 3. 1); complex b(1. 2, 2); complex c = b; if(a==b) a = b + c; b = b + c * a; c = a * b + complex(1, 2); }
Lenguaje C++ Funciones • Regulares (similares a una función C). • Miembros (asociadas a una clase). • Nombre, lista de argumentos, tipo de retorno y cuerpo. • int mi. Funcion(int a); //firma o declaración • int mi. Funcion(int a){ //definición cout<<a; • }
Lenguaje C++ Funciones extern int pow( float, int); int main() { for (int i = 0; i < 10; i++) cout << pow( 2, 5) << endl; }
Lenguaje C++ Funciones • Paso de argumentos – Por valor - seguridad • copiado en el almacenamiento local de la función • la función accede a la copia – Por referencia - velocidad - retornos múltiples • se copia la dirección del objeto que se esta pasando • la función accede al objeto – Por referencia constante - seguridad + velocidad • Vectores: paso por referencia
Lenguaje C++ Funciones • Paso de argumentos – Por valor char a = ‘a’; mi. Funcion(a); – Por referencia char a = ‘a’; mi. Funcion(&a); • Vectores: paso por referencia char a[] = {‘a’, ’b’} mi. Funcion(a);
Lenguaje C++ Funciones • Sobrecarga de nombres. – – – int max(int, int); int max(int *, int); int max(float, int); int max(int, float);
Lenguaje C++ Soporte para abstracción de datos • Definición de un conjunto de operaciones asociadas a un tipo. • Restricción del conjunto de operaciones que se pueden realizar sobre un tipo a las definidas para el mismo. • CLASE – – nombre datos miembros funciones miembro control de acceso
Lenguaje C++ Soporte para abstracción de datos • • Inicialización y destrucción. Inicialización y asignación. Patrones. Conversiones de tipo complex a = complex(1); • Múltiples implementaciones
Lenguaje C++ Soporte para orientacion a objetos • • • Funciones virtuales. Polimorfismo. Clases abstractas. Clases patrón. Herencia simple y múltiple. Encapsulado.
Lenguaje C++ • Los objetos se crean al llegar a su definición. • Los objetos se destruyen cuando salen del bloque. • Los objetos globales se crean una sola vez y se destruyen al terminar el programa. • Los objetos static son similares a los globales.
Lenguaje C++ • Almacenamiento de objetos – estático (asignada al iniciarse el programa) – automático (asociada al bloque) – en la memoria disponible (obtenida con new)
Lenguaje C++ Clases. Tipo abstracto de datos definido por el usuario Interface e implementación class X { struct X { private: int i; public: f(); protected: g(); };
Lenguaje C++ clases • Constructores – Funciones con el mismo nombre de la clase pero que no retornan nada. – Constructor de copia – Constructor por defecto – Constructores como conversores de tipo • Destructores – virtuales
Lenguaje C++ clases • CONSTRUCTORES • class Point { – int _x, _y; – public: Point() { _x = _y = 0; } – void set. X(const int val); – void set. Y(const int val); – int get. X() { return _x; } – int get. Y() { return _y; } • };
Lenguaje C++ clases • DESTRUCTORES • class Point { – – – – – • }; int _x, _y; public: Point() { _x = _y = 0; } Point(const int x, const int y) { _x = x; _y = y; } ~Point() { /* ¡Nada qué hacer! */ } void set. X(const int val); void set. Y(const int val); int get. X() { return _x; } int get. Y() { return _y; }
Lenguaje C++ clases • Friend • Nosotros podemos definir que funciones o clases sean amigos de una clase para permitirles acceso directo a sus miembros de datos privados. Por ejemplo, que la función para el operador + tuviese acceso a los miembros de datos privados _real e _imag de la clase Complex. Con ese fin declaramos que el operador + sea amigo de la clase Complex: • class Complex { • . . . public: . . . • friend Complex operator +( const Complex &, const Complex & ); • }; • Complex operator +(const Complex &op 1, const Complex &op 2) { • double real = op 1. _real + op 2. _real, imag = op 1. _imag + op 2. _imag; return(Complex(real, imag)); • }
Lenguaje C++ clases • Construcción de objetos – automáticos • variables locales: se ejecuta su constructor cada vez que el programa pasa por la declaración – secuencia de construcción - destrucción • inicialización y asignación – en memoria disponible • new, delete – – int* ip = new int(7); delete ip; int* iap = new int[10]; delete [] iap;
Lenguaje C++ clases y herencia • class Point 3 D : public Point { • int _z; • public: – Point 3 D() { set. X(0); set. Y(0); _z = 0; } – Point 3 D(const int x, const int y, const int z) { set. X(x); set. Y(y); _z = z; } – ~Point 3 D() { /* Nada que hacer */ } – int get. Z() { return _z; } – void set. Z(const int val) { _z = val; } • };
Lenguaje C++ clases y herencia múltiple • class Drawable. String : public Point, public Drawable. Object { • . . . public: – Drawable. String(. . . ){. . . } – ~Drawable. String() {. . . }. . . • };
- Slides: 37