Programación en c++

35
Programación en c++ Ander Mijangos Universidad de Deusto Octubre de 2010

description

Introducción a la programación en c++. Contenido: -Tipos de datos -Entrada y salida por consola -String -Preprocesador -Operadores y sentencias de control -Punteros -Arrays -Cadenas de caracteres -Memoria dinámica -Introducción a la POO en c++ -Referencias

Transcript of Programación en c++

Page 1: Programación en c++

Programación en c++Ander MijangosUniversidad de Deusto

Octubre de 2010

Page 2: Programación en c++

Aspectos generales de c++• Es una ampliación de c para dar soporte a la

POO• El tercer lenguaje de programación más usado

(octubre de 2010)1

• Se usa para SO, SGBD, sistemas de Tiempo Real…

• Case sensitive• Las variables sólo existen en su ámbito {…}• Los programas se organizan en dos ficheros:

▫ .h: archivos de cabecera▫ .cpp: archivos de código fuente (que incluyen el .h)

1 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Page 3: Programación en c++

¡Hola Mundo!#include <iostream>using namespace std;

void main(){cout << "¡Hola mundo!" << endl;

}

Page 4: Programación en c++

Tipos de datos básicos

•Enteros▫(signed/unsigned) (long/short) int

•Char (carácter y mucho más)▫(unsigned) char //1 byte

•Coma flotante▫float▫double //64 bits

•Booleano▫bool

Page 5: Programación en c++

Más tipos de datos (I)

•Definidos por el programador▫struct▫class▫enum▫union

•Arrays y punteros▫[]▫*

Page 6: Programación en c++

Más tipos de datos (II)

•sizeof▫sizeof(TIPO);

•typedef▫typedef TIPO_ANTIGUO TIPO_NUEVO;

•Constantes▫1, true, 0x01 (hexadecimal), 0.1, ‘a’…

•Declaración e inicialización▫unsigned int contador;▫int a = 5, b = 5, c;

Page 7: Programación en c++

Entrada y salida por consola

•Hay que incluir la STL y especificar el namespace▫#include <iostream>▫using namespace std;

•Sentencias:▫cout << "Introduzca el precio: ";▫cin >> precio;

Page 8: Programación en c++

String

•Es una clase definida en la STL▫#include <string>

•Declaración e inicialización:▫string nombreUsuario = “Ander”;

•Realmente se trata de una cadena de caracteres que finaliza en ‘\0’

•Algunas funciones miembro:▫size();

Page 9: Programación en c++

Preprocesador

•Include#include <FICHERO>

•Define#define SIMBOLO [VALOR]

•Ifdef#if(n)def SIMBOLO… #else…#endif

•Los archivos de cabecera se suelen asegurar ante inclusiones múltiples:#ifndef NOMBRE_DE_FICHERO_H#define NOMBRE_DE_FICHERO_H…#endif

Page 10: Programación en c++

Comentarios

•De bloque:▫/* … */

•De línea:▫// …

Page 11: Programación en c++

Type cast

•Convierte un tipo de datos en otroint i = 1000;char c = (char)i;

Page 12: Programación en c++

Operadores (I)

•Aritméticos▫Binarios

+ - * / % (módulo)

▫Unarios - ++ --

•Aritméticos y de asignación▫+=▫-=▫*=▫/=▫%=

Nota: con pre, primero se ejecuta el operador; con post, primero se evalúa la expresión y al final se ejecuta el operador.

Page 13: Programación en c++

Operadores (II)• Operadores relacionales

▫==▫ !=▫<▫>▫<=▫>=

• Operadores booleanos▫&& (AND)▫ || (OR)▫ ! (NOT)

Nota: valor != 0 -> truevalor == 0 -> false

Page 14: Programación en c++

Precedencia de operadores:: * & + - ! ~ &

:: new ^

-> . delete |

[] () &&

() ->* .* ||

++ * / % ?:

-- + -

= *= /= += -= >*gt;=&= ^= |= %= <<=

sizeof << >> ,

++ < > <= >=

-- == != (De arriba a bajo y de izquierda a derecha)

Page 15: Programación en c++

Control (I)• if

if (EXPRESION){

SENTENCIA(S);}else{

SENTENCIA(S);}

• switchswitch (EXPRESION){

case VALOR1:SENTENCIAS;break;

case VALOR2:SENTENCIAS;break;

case VALOR3:case VALOR4:

SENTENCIAS;break;

default:SENTENCIAS;

}

Page 16: Programación en c++

Control (II)• Operador condicional ?

EXPRESION ? EXPRESION_TRUE : EXPRESION_FALSE

• whilewhile(EXPRESION){

SENTENCIA(S);}

• do whiledo{

SENTENCIA(S);}while(EXPRESION);

• forfor(EXPRESION(ES)_INICIAL(ES); EXPRESION; EXPRESION(ES)_ITERATIVA(S)){

SENTENCIA(S);}

• Break: acaba la sentencia condicional o repetitiva actual

• Continue: salta hasta la terminación de la iteración actual

Page 17: Programación en c++

Funciones

•FormatoTIPO_RETORNO IDENTIFICADOR( [PARAMETRO(S)] ){[return VALOR;]

}

•Se puede declarar la función antes de implementarla

•Al llegar a un return la función finaliza

Page 18: Programación en c++

Punteros (I)• Es un tipo de datos• Generalmente tiene 32 bits• Interpretación: representa una dirección de

memoria• Formato:

▫int*punteroEntero;• Indirección (acceso al contenido referenciado):

▫*punteroEntero= 1000;• Nunca se asigna directamente un valor a un

puntero• Obtener la dirección de una variable:

▫&miVariable

Page 19: Programación en c++

Punteros (II)

•El SO reserva memoria:▫Al declarar una variable (memoria

estática): int i;

▫A petición del programador (memoria dinámica) (explicado posteriormente)

•Utilidad de los punteros:▫Modificar una variable en una función

Page 20: Programación en c++

Arrays• Conjuntos de datos consecutivos• Declaración (obligatorio que sea un valor constante, si no,

ver memoria dinámica):int arrayEnteros[20];

• Inicialización:int arrayEnteros[2] = {5, 9};int arrayEnteros[] = {5, 9};

• Acceder a los datos del array:arrayEnteros[0] = 0;arrayEnteros[1] = 0;

• Conocer el tamaño de un array:sizeof(arrayEnteros) / sizeof(int);

• Arrays multidimensionales:intarrayEntero2D[2][3] = {{1, 2, 3}, {1, 2, 3}};

Nota: un array de N elementos tiene los elementos de 0 a N-1

Page 21: Programación en c++

Arrays y punteros• El identificador de un array es un puntero

constante que apunta a la dirección de memoria del primer elemento del array.

• Un puntero puede usarse con [], sumando sobre la dirección inicial bytes según el tipo del puntero.

• Pasar un array como parámetro:funcion (array, 2);void funcion1(int array[], int tamanio) {…}void funcion2(int* puntero, int tamanio) {…}

• Sizeof funciona con el array entero, con un puntero devuelve el tamaño del puntero (32 bits)

Page 22: Programación en c++

Cadenas de caracteres

•Son arrays de tipo char•const char* cadena = “Hola mundo”;•En <string.h> hay muchas funciones•El tipo de datos string encapsula todo

esto

Page 23: Programación en c++

Memoria dinámica• Reservar y liberar memoria:

▫ int* punteroEntero = new int();▫delete punteroEntero;

• En el caso de arrays:▫ int* puntero = new int[10];▫delete [] puntero;

• Un new obliga a usar un delete en algún momento.• Utilidad: evitar perder la información cuando la

variable muere• Función dinámica: función que devuelve una

dirección de memoria

Page 24: Programación en c++

Estructuras• Especificación:struct TIPO{TIPO_0 dato0;TIPO_1 dato1;…TIPO_NdatoN;

};• Uso (.):ESTRUCTURA e;e.TIPO_0;

• Uso con un puntero a la estructura (->):ESTRUCTURA* pE;pE->TIPO_0;

Page 25: Programación en c++

POO: Clases• Declaración:class Fecha{

unsigned int anyo;unsigned int mes;unsigned int dia;

};

• Una clase tiene:▫ Datos miembro = atributos▫ Funciones miembro = métodos

• Clases y objetos▫ Clase: declaración del tipo de datos▫ Objeto: variable de dicho tipo de datos (instanciación)

Page 26: Programación en c++

POO: Encapsulación• Programación Orientada a Objetos• Consta de:

▫ Clases▫ Encapsulación

• Encapsulación: determina si se puede acceder a los atributos y métodos desde fuera de la clase (programa principal).▫ public: son accesibles desde fuera▫ private: sólo son accesibles desde la clase (o algún

método público que lo manipule -> más control)• Generalmente: atributos privados y métodos públicos• Se usan getters y setters para manipular los atributos

Page 27: Programación en c++

POO: Constructores y destructores• Constructor: método especial que se ejecuta al instanciar un

objeto.▫ No devuelve nada▫ Se llama igual que la clase, con () por ser método▫ Se usa para inicializar los atributos▫ Hay un constructor por defecto

• Destructor: método especial que se ejecuta al eliminar un objeto de memoria.▫ No devuelve nada▫ Se llama igual que la clase, precedido de ~ y con () por ser

método▫ Se usa para liberar memoria dinámica, cerrar ficheros…▫ Hay un destructor por defecto

• Pueden encapsularse como privados, pero en general serán públicos

Page 28: Programación en c++

POO: Sobrecarga

•Dos métodos pueden llamarse igual si cambian:▫El número de parámetros▫El tipo de los parámetros

•Se puede sobrecargar el constructor•No tiene sentido sobrecargar el

destructor•Un constructor con parámetros hace que

el constructor por defecto se pierda (obliga a pasar parámetros en la instanciación)

Page 29: Programación en c++

Constructor de copia y operador de asignación• Constructor de copia

▫Se llama en cuatro casos: Al crear un objeto como copia de otro

ArrayInt ai2 = ai; ArrayInt ai2(ai1);

Al llamar a una función pasándole por valor un objeto Al hacer return de un objeto

▫Cadena (const Cadena& c)• Operador de asignación

▫Se llama al hacer una asignación▫Cadena& operator= (const cadena& c) return *this

Page 30: Programación en c++

POO: Operador ::

•Generalmente, la clase se declara en un fichero .h y los métodos se implementan en un .cpp.

•Operador de resolución de ámbito:▫Fecha::Fecha()

•Llamada a un método:▫objeto.metodo(parámetros);

Page 31: Programación en c++

POO: Puntero this• En los métodos no se pasa el objeto como parámetro• El compilador añade automáticamente:

▫bool esBisiesto(Fecha* const this)• ‘This’ es un puntero al objeto desde el que se llama a

la función.• Su uso no es obligatorio salvo:

▫Para distinguir el atributo de otro parámetro llamado igual (this->atributo)

▫Para referenciar al objeto en sí• Para que el objeto referenciado también sea

constante, al final de la cabecera del método se escribe ‘const’

Page 32: Programación en c++

POO: Miembros estáticos•Atributo estático: cada objeto no tiene su

propio valor para el atributo sino que es compartido.▫Para acceder desde el programa principal:

Fecha::Meses▫Se inicializa en el .cpp donde se implementan

los métodos de la clase.•Método estático: no recibe el objeto por

parámetro (no tiene this).▫Para acceder desde el programa principal:

Fecha::esBisiesto(2006)

Page 33: Programación en c++

Punteros a funciones• Declaración del puntero:int (*punteroAIntFuncionIntInt) (int, int);

• Función que se va a referenciar:int funcion(int, int){}

• Asignación de la dirección:punteroAIntFuncionIntInt = &funcion; //& opcional

• Llamada a la función desde el puntero:funcion(1,3)punteroAIntFuncionIntInt(1,3); // Hacen lo mismo

Page 34: Programación en c++

Referencias

•Permiten modificar una variable en una función sin tratar con punteros

CON PUNTEROS:

void funcion(int* pi){

*pi= 2;}void main(){

int i = 1;funcion(&i);

}

CON REFERENCIAS:

void funcion(int& ri){ri = 2;}void main(){int i = 1;funcion(i);}

NORMAL (el valor nose modifica):void funcion(int i){

i= 2;}void main(){

int i = 1;funcion(i);

}

Page 35: Programación en c++

Esta presentación está basada en los apuntes tomados en la asignatura de Laboratorio de

Informática I impartida por Jesús Sanz e Iker Jamardo, en la facultad de Ingeniería de la

Universidad de Deusto.

Esta presentación está publicada bajo la licencia Creative Commons Reconocimiento –

No Comercial 3.0 Españahttp://creativecommons.org/licenses/by-nc/3.0/es/

Ander MijangosUniversidad de Deusto

andermijan (arroba) gmail (punto) comhttp://www.slideshare.net/andermijan