900 likes | 2.21k Views
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
E N D
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, 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 variable1; • bool variable2=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 = {valor1, valor2, …, valorN}]; • EJEMPLO: • char arreglo1[10]; • float arreglo2={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 = { {valor1, valor2, …, valorN}, {valor1, valor2, …, valorN} }; • EJEMPLO: • char arreglo1[10][10]; • int arreglo2[]={{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 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; } aDate; La definición de arriba de aDate 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 anotherDate; • 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 puede puedes usar b = a++; b = ++a;
Lenguaje C++Sobrecarga de operadores + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- ->* -> , [ ] ( ) new new[ ] delete delete[ ] No se sobrecargan: :: . .*
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 miFuncion(int a); //firma o declaración • int miFuncion(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’; miFuncion(a); • Por referencia char a = ‘a’; miFuncion(&a); • Vectores: paso por referencia char a[] = {‘a’,’b’} miFuncion(a);
Lenguaje C++Funciones • Sobrecarga de nombres. • int max(int, int); • int max( int, 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 usuarioInterface e implementación class X { private: int i; public: f(); protected: g(); }; 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 setX(const int val); • void setY(const int val); • int getX() { return _x; } • int getY() { 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 setX(const int val); • void setY(const int val); • int getX() { return _x; } • int getY() { 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 &op1, const Complex &op2) { • double real = op1._real + op2._real, imag = op1._imag + op2._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 Point3D : public Point { • int _z; • public: • Point3D() { setX(0); setY(0); _z = 0; } • Point3D(const int x, const int y, const int z) { setX(x); setY(y); _z = z; } • ~Point3D() { /* Nada que hacer */ } • int getZ() { return _z; } • void setZ(const int val) { _z = val; } • };
Lenguaje C++clases y herencia múltiple • class DrawableString : public Point, public DrawableObject { • ... public: • DrawableString(...){ ... } • ~DrawableString() { ... } ... • };