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&TB. 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 objetosPaso 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 conceptosConserva características del C y añade nuevos conceptos
Lenguaje C++ Extensiones respecto al C No orientadas a objetoNo orientadas a objeto Orientadas a objetosOrientadas a objetos
Lenguaje C++ Extensiones respecto al C No orientadas a objetoNo orientadas a objeto –Mejoras en entrada/salida - streams –Sobrecarga de funciones y operadores –Parámetros por defecto. Referencias
Lenguaje C++ Organización de programasOrganización de programas –Ficheros de declaraciones (.h) Del sistemaDel sistema Del usuario (#ifndef.... #define..... #endif)Del usuario (#ifndef.... #define..... #endif) –Ficheros de código fuente (.cc,.cpp)
Lenguaje C++ Scope (alcance)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 contextoCada variable tiene un “scope” o un contexto
Lenguaje C++ Operadores y sentenciasOperadores y sentencias –Sentencias Misma sintaxis y semántica que las de CMisma sintaxis y semántica que las de C –Operadores idem sentencias excepto: new, delete, delete[], ::new, delete, delete[], :: > > SobrecargaSobrecarga
Lenguaje C++ Estructura básica de un programa #include<iostream.h>main(){//inicio cout << “Hello world”; }//fin
Lenguaje C++ Elementos del programa COMENTARIOSCOMENTARIOS // Comentario de una sola línea// Comentario de una sola línea /* Comentario multilínea *//* Comentario multilínea */ BLOQUES DE CÓDIGOBLOQUES DE CÓDIGO { Todos los bloques de código van entre corchetes }{ Todos los bloques de código van entre corchetes } FIN DE LINEAFIN DE LINEA Todas las instrucciones terminan con un punto y comaTodas 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 falseTipo de dato bool tiene dos valores asociados true o false DECLARACIÓN DE UNA VARIABLEDECLARACIÓN DE UNA VARIABLE Nombre_variable; Nombre_variable; INICIALIZACION DE UNA VARIABLEINICIALIZACION DE UNA VARIABLE Nombre_variable = [valor]; Nombre_variable = [valor]; EJEMPLO:EJEMPLO: int variable1;int variable1; bool variable2=true;bool variable2=true;
Lenguaje C++ Tipo básico de datos Variables y aritmética.Variables y aritmética. Todo nombre y/o expresión tiene un tipo.Todo nombre y/o expresión tiene un tipo. El tipo determina las operaciones que se pueden realizar con el.El tipo determina las operaciones que se pueden realizar con el. Conversiones implícitas.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.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ásicosUn arreglo es un conjunto de tipos de datos básicos DECLARACIÓN DE UN ARREGLODECLARACIÓN DE UN ARREGLO Nombre_variable[Número de elementos]; Nombre_variable[Número de elementos]; INICIALIZACION DE UN ARREGLOINICIALIZACION DE UN ARREGLO Nombre_variable = {valor1, valor2, …, valorN}]; Nombre_variable = {valor1, valor2, …, valorN}]; EJEMPLO:EJEMPLO: char arreglo1[10];char arreglo1[10]; float arreglo2={1.5, 2.3, 6,7};float arreglo2={1.5, 2.3, 6,7};
Lenguaje C++ Arreglos Multidimencionales DECLARACIÓN DE UN ARREGLO MULTIDIMENCIONALDECLARACIÓN DE UN ARREGLO MULTIDIMENCIONAL Nombre_variable[Número de elementos][Numero de elementos]; Nombre_variable[Número de elementos][Numero de elementos]; INICIALIZACION DE UN ARREGLO MULTIDIMENCIONALINICIALIZACION DE UN ARREGLO MULTIDIMENCIONAL Nombre_variable = { {valor1, valor2, …, valorN}, {valor1, valor2, …, valorN} }; Nombre_variable = { {valor1, valor2, …, valorN}, {valor1, valor2, …, valorN} }; EJEMPLO:EJEMPLO: char arreglo1[10][10];char arreglo1[10][10]; int arreglo2[]={{1,2,3},{4,5,6}{7,8,9}};int arreglo2[]={{1,2,3},{4,5,6}{7,8,9}};
Lenguaje C++ Apuntadores y vectores Punteros 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 asociadaspunteros - 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)ESTRUCTURAS (Registros) struct date_s { int day, month, year; int day, month, year; } aDate; } 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; EnumeracionesEnumeraciones ClasesClases
Lenguaje C++ Instrucciones de control de flujo EJEMPLOEJEMPLO for(int i=0; i<5; i++){for(int i=0; i<5; i++){ cout << “Hello world”<<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); 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; a = b + c; b = b + c * a; c = a * b + complex(1,2); }
Lenguaje C++ Funciones Regulares (similares a una función C).Regulares (similares a una función C). Miembros (asociadas a una clase).Miembros (asociadas a una clase). Nombre, lista de argumentos, tipo de retorno y cuerpo.Nombre, lista de argumentos, tipo de retorno y cuerpo. int miFuncion(int a); //firma o declaraciónint miFuncion(int a); //firma o declaración int miFuncion(int a){ //definiciónint miFuncion(int a){ //definición cout<<a; cout<<a; }
Lenguaje C++ Funciones extern int pow( float, int); int main() { for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++) cout << pow( 2, 5) << endl; }
Lenguaje C++ Funciones Paso de argumentosPaso de argumentos –Por valor - seguridad copiado en el almacenamiento local de la funcióncopiado en el almacenamiento local de la función la función accede a la copiala función accede a la copia –Por referencia - velocidad - retornos múltiples se copia la dirección del objeto que se esta pasandose copia la dirección del objeto que se esta pasando la función accede al objetola función accede al objeto –Por referencia constante - seguridad + velocidad Vectores: paso por referenciaVectores: paso por referencia
Lenguaje C++ Funciones Paso de argumentosPaso de argumentos –Por valor char a = ‘a’; miFuncion(a); –Por referencia char a = ‘a’; miFuncion(&a); Vectores: paso por referenciaVectores: paso por referencia char a[] = {‘a’,’b’} miFuncion(a);
Lenguaje C++ Funciones Sobrecarga de nombres.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.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.Restricción del conjunto de operaciones que se pueden realizar sobre un tipo a las definidas para el mismo. CLASECLASE –nombre –datos miembros –funciones miembro –control de acceso
Lenguaje C++ Soporte para abstracción de datos Inicialización y destrucción.Inicialización y destrucción. Inicialización y asignación.Inicialización y asignación. Patrones.Patrones. Conversiones de tipoConversiones de tipo complex a = complex(1); Múltiples implementacionesMúltiples implementaciones
Lenguaje C++ Soporte para orientacion a objetos Funciones virtuales. Polimorfismo.Funciones virtuales. Polimorfismo. Clases abstractas.Clases abstractas. Clases patrón.Clases patrón. Herencia simple y múltiple.Herencia simple y múltiple. Encapsulado.Encapsulado.
Lenguaje C++ Lenguaje C++ Los objetos se crean al llegar a su definición.Los objetos se crean al llegar a su definición. Los objetos se destruyen cuando salen del bloque.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 globales se crean una sola vez y se destruyen al terminar el programa. Los objetos static son similares a los globales.Los objetos static son similares a los globales.
Lenguaje C++ Almacenamiento de objetosAlmacenamiento 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 { private: int i; public:f();protected:g();}; struct X { private: int i; public:f();protected:g();};
Lenguaje C++ clases ConstructoresConstructores –Funciones con el mismo nombre de la clase pero que no retornan nada. –Constructor de copia –Constructor por defecto –Constructores como conversores de tipo DestructoresDestructores –virtuales
Lenguaje C++ clases CONSTRUCTORESCONSTRUCTORES class Point {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 DESTRUCTORESDESTRUCTORES class Point {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 FriendFriend 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: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 {class Complex {... public: public:... friend Complex operator +( const Complex &, const Complex & );friend Complex operator +( const Complex &, const Complex & ); };}; Complex operator +(const Complex &op1, const Complex &op2) {Complex operator +(const Complex &op1, const Complex &op2) { double real = op1._real + op2._real, imag = op1._imag + op2._imag; return(Complex(real, imag));double real = op1._real + op2._real, imag = op1._imag + op2._imag; return(Complex(real, imag)); } }
Lenguaje C++ clases Construcción de objetosConstrucción de objetos –automáticos variables locales: se ejecuta su constructor cada vez que el programa pasa por la declaraciónvariables 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óninicialización y asignación –en memoria disponible new, deletenew, delete –int* ip = new int(7); –delete ip; –int* iap = new int[10]; –delete [] iap;
Lenguaje C++ clases y herencia class Point3D : public Point {class Point3D : public Point { int _z; int _z; public: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 {class DrawableString : public Point, public DrawableObject {... public:... public: –DrawableString(...){... } –~DrawableString() {... }... };};