View
236
Download
0
Category
Preview:
Citation preview
Lenguaje C++Lenguaje C++
GRANADOS PAREDES GRANADOS PAREDES GIBRÁNGIBRÁN
Lenguajes de Programación
Dra. Ana Lilia Laureano Cruces
Lenguaje C++Lenguaje C++IntroducciónIntroducción
• B. Stroustrup, mediados de los 80, B. Stroustrup, mediados de los 80, AT&TAT&T
• Paso de la programación tradicional Paso de la programación tradicional (C) a estilos de abstracción de datos (C) a estilos de abstracción de datos y orientación a objetosy orientación a objetos
• Conserva características del C y Conserva características del C y añade nuevos conceptosañade nuevos conceptos
Lenguaje C++Lenguaje C++ Extensiones respecto al C Extensiones respecto al C
• No orientadas a objetoNo orientadas a objeto
• Orientadas a objetosOrientadas a objetos
Lenguaje C++Lenguaje C++ Extensiones respecto al C Extensiones respecto al C
• No orientadas a objeto No orientadas a objeto – Mejoras en entrada/salida - streamsMejoras en entrada/salida - streams– Sobrecarga de funciones y operadoresSobrecarga de funciones y operadores– Parámetros por defecto. ReferenciasParámetros por defecto. Referencias
Lenguaje C++Lenguaje C++
• Organización de programas Organización de programas – Ficheros de declaraciones (.h)Ficheros de declaraciones (.h)
• Del sistemaDel sistema• Del usuario (#ifndef .... #define ..... #endif)Del usuario (#ifndef .... #define ..... #endif)
– Ficheros de código fuente (.cc, .cpp) Ficheros de código fuente (.cc, .cpp)
Lenguaje C++Lenguaje C++
• Scope (alcance)Scope (alcance)– Fichero: declaraciones que no pertenecen Fichero: declaraciones que no pertenecen
a función o clase algunaa función o clase alguna– Función: etiquetasFunción: etiquetas– Local: cualquier nombre declarado en un Local: cualquier nombre declarado en un
bloque pertenece al bloque.bloque pertenece al bloque.– Clase: declaraciones asociadas a una claseClase: declaraciones asociadas a una clase
• Cada variable tiene un “scope” o un Cada variable tiene un “scope” o un contexto contexto
Lenguaje C++Lenguaje C++
• Operadores y sentenciasOperadores y sentencias– SentenciasSentencias
• Misma sintaxis y semántica que las de CMisma sintaxis y semántica que las de C
– Operadores idem sentencias excepto: Operadores idem sentencias excepto: • new, delete, delete[], ::new, delete, delete[], ::• <<, >><<, >>• Sobrecarga Sobrecarga
Lenguaje C++Lenguaje C++Estructura básica de un Estructura básica de un
programaprograma#include<iostream.h>#include<iostream.h>
main()main()
{//inicio {//inicio
cout << “Hello world”;cout << “Hello world”;
}//fin}//fin
Lenguaje C++Lenguaje C++Elementos del programaElementos 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 { Todos los bloques de código van entre
corchetes }corchetes }• FIN DE LINEAFIN DE LINEA• Todas las instrucciones terminan con un Todas las instrucciones terminan con un
punto y comapunto y coma
Lenguaje C++Lenguaje C++Tipo básico de datosTipo básico de datos
• Tipo de dato Tipo de dato boolbool tiene dos tiene dos valores asociados true o falsevalores asociados true o false
• DECLARACIÓN DE UNA DECLARACIÓN DE UNA VARIABLEVARIABLE
• <Tipo de dato> <Tipo de dato> Nombre_variable;Nombre_variable;
• INICIALIZACION DE UNA INICIALIZACION DE UNA VARIABLEVARIABLE
• <Tipo de dato> <Tipo de dato> Nombre_variable = [valor];Nombre_variable = [valor];
• EJEMPLO:EJEMPLO:• int variable1;int variable1;• bool variable2=true;bool variable2=true;
Lenguaje C++Lenguaje C++ Tipo básico de datos 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 El tipo determina las operaciones que se
pueden realizar con el.pueden realizar con el.• Conversiones implícitas.Conversiones implícitas.• En asignaciones y operaciones En asignaciones y operaciones
algebraicas el lenguaje lleva a cabo algebraicas el lenguaje lleva a cabo todas las conversiones implícitas que todas las conversiones implícitas que faciliten el uso y sean seguras.faciliten el uso y sean seguras.
Lenguaje C++Lenguaje C++ArreglosArreglos
• 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• <Tipo de dato básico> Nombre_variable[Número de <Tipo de dato básico> Nombre_variable[Número de
elementos];elementos];
• INICIALIZACION DE UN ARREGLOINICIALIZACION DE UN ARREGLO• <Tipo de dato> Nombre_variable = {valor1, valor2, …, <Tipo de dato> Nombre_variable = {valor1, valor2, …,
valorN}];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++Lenguaje C++ Arreglos Arreglos
MultidimencionalesMultidimencionales• DECLARACIÓN DE UN ARREGLO DECLARACIÓN DE UN ARREGLO
MULTIDIMENCIONALMULTIDIMENCIONAL• <Tipo de dato básico> Nombre_variable[Número <Tipo de dato básico> Nombre_variable[Número
de elementos][Numero de elementos];de elementos][Numero de elementos];
• INICIALIZACION DE UN ARREGLO INICIALIZACION DE UN ARREGLO MULTIDIMENCIONALMULTIDIMENCIONAL
• <Tipo de dato> Nombre_variable = { {valor1, <Tipo de dato> Nombre_variable = { {valor1, valor2, …, valorN}, {valor1, valor2, …, valorN} };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++Lenguaje C++Apuntadores y vectoresApuntadores y vectores
• Punteros y vectores.Punteros y vectores.char v[10]; //vector de 10 caracteres (0 a 9)char v[10]; //vector de 10 caracteres (0 a 9)char *p; // puntero a un carácterchar *p; // puntero a un carácterp = &v[3]; //p apunta al cuarto elemento de vp = &v[3]; //p apunta al cuarto elemento de v
• punteros - operaciones asociadaspunteros - operaciones asociadas– int *p; //puntero a enteroint *p; //puntero a entero– int **p; //puntero a puntero a enteroint **p; //puntero a puntero a entero– int (*vp) [10]; //puntero a vector de 10 enterosint (*vp) [10]; //puntero a vector de 10 enteros– int (*fp) ( char, char *);// puntero a funciónint (*fp) ( char, char *);// puntero a función
Lenguaje C++Lenguaje C++Tipos definidos por el Tipos definidos por el
usuariousuario• ESTRUCTURAS (Registros)ESTRUCTURAS (Registros)struct date_s {struct date_s { int day, month, year;int day, month, year; } aDate;} aDate;
La definición de arriba de aDate es también la La definición de arriba de aDate es también la declaración de una estructura llamada date_s. declaración de una estructura llamada date_s. Podemos definir otras variables de este tipo Podemos definir otras variables de este tipo referenciando la estructura por el nombre: referenciando la estructura por el nombre:
struct date_s anotherDate;struct date_s anotherDate;• EnumeracionesEnumeraciones• ClasesClases
Lenguaje C++Lenguaje C++Instrucciones de control de flujoInstrucciones de control de flujo
• EJEMPLOEJEMPLO• for(int i=0; i<5; i+for(int i=0; i<5; i+
+){+){ cout << “Hello cout << “Hello
world”<<i;world”<<i;
• }}
Lenguaje C++Lenguaje C++OperadoresOperadores
Los operadores de Los operadores de incremento ++ y -- incremento ++ y -- pueden ser explicados pueden ser explicados por medio del por medio del siguiente ejemplo. Si siguiente ejemplo. Si tienes la siguiente tienes la siguiente secuencia de secuencia de instrucciones instrucciones
a = a + 1; b = a; a = a + 1; b = a;
Se puede puedes usarSe puede puedes usar
b = a++; b = a++;
b = ++a; b = ++a;
Lenguaje C++Lenguaje C++Sobrecarga de operadoresSobrecarga de operadores
+ - * / % ^ & | ~ ! = < > += -= *= /= + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &=%= ^= &=
|= << >> >>= <<= == != <= >= |= << >> >>= <<= == != <= >= && || ++ -- && || ++ --
->* -> , [ ] ( ) new new[ ] delete delete[ ] ->* -> , [ ] ( ) new new[ ] delete delete[ ]
No se sobrecargan: No se sobrecargan: ::::...*.*
Lenguaje C++Lenguaje C++Sobrecarga de operadoresSobrecarga de operadores
class complex {class complex {double re, im;double re, im;
public:public:complex(double r, double i) : re(r), im(i){}complex(double r, double i) : re(r), im(i){}complex operator+(complex);complex operator+(complex);complex operator*(complex);complex operator*(complex);
bool operator==(complex);bool operator==(complex); bool operator<(complex);bool operator<(complex);};};void f()void f(){{ complex a(1, 3.1);complex a(1, 3.1);
complex b(1.2, 2);complex b(1.2, 2);complex c = b;complex c = b;if(a==b)if(a==b) a = b + c;a = b + c;b = b + c * a;b = b + c * a;c = a * b + complex(1,2);c = a * b + complex(1,2);
}}
Lenguaje C++Lenguaje C++FuncionesFunciones
• 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 Nombre, lista de argumentos, tipo de retorno y cuerpo.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++Lenguaje C++FuncionesFunciones
extern int pow( float, int);extern int pow( float, int);
int main()int main()
{{
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
cout << pow( 2, 5) << endl;cout << pow( 2, 5) << endl;
}}
Lenguaje C++Lenguaje C++FuncionesFunciones
• Paso de argumentosPaso de argumentos– Por valor - seguridadPor 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últiplesPor 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 + Por referencia constante - seguridad + velocidadvelocidad
• Vectores: paso por referenciaVectores: paso por referencia
Lenguaje C++Lenguaje C++FuncionesFunciones
• Paso de argumentosPaso de argumentos– Por valor Por valor char a = ‘a’;char a = ‘a’;miFuncion(a);miFuncion(a);– Por referenciaPor referenciachar a = ‘a’;char a = ‘a’;miFuncion(&a);miFuncion(&a);
• Vectores: paso por referenciaVectores: paso por referenciachar a[] = {‘a’,’b’}char a[] = {‘a’,’b’}miFuncion(a);miFuncion(a);
Lenguaje C++Lenguaje C++FuncionesFunciones
• Sobrecarga de nombres.Sobrecarga de nombres.– int max(int, int);int max(int, int);– int max( int, int, int);int max( int, int, int);– int max(int *, int);int max(int *, int);– int max(float, int);int max(float, int);– int max(int, float);int max(int, float);
Lenguaje C++Lenguaje C++Soporte para abstracción Soporte para abstracción
de datosde datos• Definición de un conjunto de Definición de un conjunto de
operaciones asociadas a un tipo.operaciones asociadas a un tipo.• Restricción del conjunto de operaciones Restricción del conjunto de operaciones
que se pueden realizar sobre un tipo a que se pueden realizar sobre un tipo a las definidas para el mismo.las definidas para el mismo.
• CLASECLASE– nombrenombre– datos miembrosdatos miembros– funciones miembrofunciones miembro– control de acceso control de acceso
Lenguaje C++Lenguaje C++Soporte para abstracción de Soporte para abstracción de
datosdatos• Inicialización y destrucción.Inicialización y destrucción.• Inicialización y asignación.Inicialización y asignación.• Patrones.Patrones.• Conversiones de tipo Conversiones de tipo
complex a = complex(1);complex a = complex(1);
• Múltiples implementaciones Múltiples implementaciones
Lenguaje C++Lenguaje C++Soporte para orientacion a Soporte para orientacion a
objetosobjetos• 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 Los objetos se crean al llegar a su definición.definición.
• Los objetos se destruyen cuando salen Los objetos se destruyen cuando salen del bloque.del bloque.
• Los objetos globales se crean una sola Los objetos globales se crean una sola vez y se destruyen al terminar el vez y se destruyen al terminar el programa.programa.
• Los objetos static son similares a los Los objetos static son similares a los globales.globales.
Lenguaje C++Lenguaje C++
• Almacenamiento de objetosAlmacenamiento de objetos
– estático (asignada al iniciarse el estático (asignada al iniciarse el programa)programa)
– automático (asociada al bloque)automático (asociada al bloque)
– en la memoria disponible (obtenida con en la memoria disponible (obtenida con new)new)
Lenguaje C++Lenguaje C++ Clases. Clases.
Tipo abstracto de datos definido por Tipo abstracto de datos definido por el usuarioel usuario
Interface e implementaciónInterface e implementaciónclass X {class X {private:private:
int i;int i;
public:public:
f();f();
protected:protected:
g();g();
};};
struct X {struct X {private:private:
int i;int i;
public:public:
f();f();
protected:protected:
g();g();
};};
Lenguaje C++Lenguaje C++clasesclases
• ConstructoresConstructores– Funciones con el mismo nombre de la Funciones con el mismo nombre de la
clase pero que no retornan nada. clase pero que no retornan nada. – Constructor de copiaConstructor de copia– Constructor por defectoConstructor por defecto– Constructores como conversores de tipoConstructores como conversores de tipo
• Destructores Destructores – virtualesvirtuales
Lenguaje C++Lenguaje C++clasesclases
• CONSTRUCTORESCONSTRUCTORES• class Point { class Point {
– int _x, _y; int _x, _y; – public: Point() { _x = _y = 0; } public: Point() { _x = _y = 0; } – void setX(const int val);void setX(const int val);– void setY(const int val); void setY(const int val); – int getX() { return _x; } int getX() { return _x; } – int getY() { return _y; } int getY() { return _y; }
• }; };
Lenguaje C++Lenguaje C++clasesclases
• DESTRUCTORESDESTRUCTORES• class Point { class Point {
– int _x, _y; int _x, _y; – public: public: – Point() { _x = _y = 0; } Point() { _x = _y = 0; } – Point(const int x, const int y) { _x = x; _y = y; } Point(const int x, const int y) { _x = x; _y = y; } – ~Point() { /* ¡Nada qué hacer! */ } ~Point() { /* ¡Nada qué hacer! */ } – void setX(const int val);void setX(const int val);– void setY(const int val); void setY(const int val); – int getX() { return _x; } int getX() { return _x; } – int getY() { return _y; } int getY() { return _y; }
• }; };
Lenguaje C++Lenguaje C++clasesclases
• FriendFriend• Nosotros podemos definir que funciones o clases sean amigos de una Nosotros podemos definir que funciones o clases sean amigos de una
clase para permitirles acceso directo a sus miembros de datos privados. clase para permitirles acceso directo a sus miembros de datos privados. Por ejemplo, que la función para el operador + tuviese acceso a los Por ejemplo, que la función para el operador + tuviese acceso a los miembros de datos privados miembros de datos privados _real_real e e _imag_imag de la clase de la clase ComplexComplex. Con ese . Con ese fin declaramos que el operador + sea amigo de la clase fin declaramos que el operador + sea amigo de la clase ComplexComplex: :
• 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 + double real = op1._real + op2._real, imag = op1._imag + op2._imag; return(Complex(real, imag));op2._imag; return(Complex(real, imag));
• } }
Lenguaje C++Lenguaje C++clasesclases
• Construcción de objetosConstrucción de objetos– automáticos automáticos
• variables locales: se ejecuta su constructor cada vez variables locales: se ejecuta su constructor cada vez que el programa pasa por la declaraciónque el programa pasa por la declaración
– secuencia de construcción - destrucciónsecuencia de construcción - destrucción
• inicialización y asignacióninicialización y asignación
– en memoria disponibleen memoria disponible• new, deletenew, delete
– int* ip = new int(7);int* ip = new int(7);– delete ip;delete ip;– int* iap = new int[10]; int* iap = new int[10]; – delete [] iap;delete [] iap;
Lenguaje C++Lenguaje C++clases y herenciaclases y herencia
• class Point3D : public Point {class Point3D : public Point {• int _z; int _z; • public:public:
– Point3D() { setX(0); setY(0); _z = 0; } Point3D() { setX(0); setY(0); _z = 0; } – Point3D(const int x, const int y, const int z) Point3D(const int x, const int y, const int z)
{ setX(x); setY(y); _z = z; } { setX(x); setY(y); _z = z; } – ~Point3D() { /* Nada que hacer */ } ~Point3D() { /* Nada que hacer */ } – int getZ() { return _z; }int getZ() { return _z; }– void setZ(const int val) { _z = val; }void setZ(const int val) { _z = val; }
• }; };
Lenguaje C++Lenguaje C++clases y herencia múltipleclases y herencia múltiple
• class DrawableString : public class DrawableString : public Point, public DrawableObject {Point, public DrawableObject {
• ... public: ... public: – DrawableString(...){ ... } DrawableString(...){ ... } – ~DrawableString() { ... } ... ~DrawableString() { ... } ...
• }; };
Recommended