curso c++: variables y tipos - laboratorio ss.oo...

63
Curso C++: Variables y Tipos Jorge Peña Pastor [email protected] June 7, 2011 Jorge Peña Pastor Variables y Tipos 1/53

Upload: nguyenhanh

Post on 25-Sep-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Curso C++:Variables y Tipos

Jorge Peña Pastor

[email protected]

June 7, 2011

Jorge Peña Pastor Variables y Tipos 1/53

Page 2: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Variables

Representan cantidades y/o cualidades.Antes de usarlas debemos declararlas para que el compilador(o intérprete) pueda conocer:

• Su nombre• Su ámbito de vida• Su visibilidad• El tipo de datos asociado

Jorge Peña Pastor Variables y Tipos 2/53

Page 3: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Declaración de Variables

• Simple:

int i ;

• Múltiple:

int i , j , k ;

• Con asignación de valor inicial:

int i = 5;

int i = −133, j = i , k ;

Jorge Peña Pastor Variables y Tipos 3/53

Page 4: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Declaración de Variables

• Simple:

int i ;

• Múltiple:

int i , j , k ;

• Con asignación de valor inicial:

int i = 5;

int i = −133, j = i , k ;

Jorge Peña Pastor Variables y Tipos 3/53

Page 5: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Nombres de Variables

Deben reflejar los términos abstractos del problema.No deben ser ambiguos.El lenguaje puede restringir el nombrado:

• Identificadores correctos: {a-zA-Z_}[a-zA-Z_0-9]*• No estan permitidas variables cuyo nombre coincida con

palabras reservadas del lenguaje.• No se admiten símbolos especiales: ; " ’ ñ , ? ! ^ ~ …• Otras restricciones (ej. longitud).

Jorge Peña Pastor Variables y Tipos 4/53

Page 6: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Palabras Reservadas en C++

asm, auto, bool, break, case, catch, char, class, const,const_cast, continue, default, delete, do, double,

dynamic_cast, else, enum, explicit, export, extern, false,float, for, friend, goto, if, inline, int, long, mutable,

namespace, new, operator, private, protected, public,register, reinterpret_cast, return, short, signed, sizeof,static, static_cast, struct, switch, template, this, throw,true, try, typedef, typeid, typename, union, unsigned,

using, virtual, void, volatile, wchar_t, while

Jorge Peña Pastor Variables y Tipos 5/53

Page 7: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ámbito de Vida

Determina durante cuánto tiempo existe una variable.• Variable global a módulo o programa:

• Existen durante todo el tiempo de ejecución.• Toman valor inicial 0 (todos sus bits a 0).

• Variable local o parámetro formal de una función:• Existen sólo durante cada llamada.• Toman valor inicial indeterminado (basura).

Jorge Peña Pastor Variables y Tipos 6/53

Page 8: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Visibilidad

Determina desde dónde podemos usar una variable.• Variable global al programa:

• Desde cualquier punto del programa.• Variable global a un módulo:

• Sólo desde dicho módulo.• Variable local o parámetro formal de función:

• Sólo desde dicha función.• Una variable local oculta a una global con el mismo

nombre.

Jorge Peña Pastor Variables y Tipos 7/53

Page 9: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ejemplos de Ámbito y Visibilidad

int a,b; /∗ Globales ∗/void funcion(void){/∗ Las variables a y b son variables enteras ∗//∗ La variable c no existe ∗/}int main(void){float a,c ; /∗ Locales ∗//∗ Las variables a y c son reales ∗//∗ La variable b es entera ∗/}

Jorge Peña Pastor Variables y Tipos 8/53

Page 10: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Modificadores de Variablesconst

• Su valor no debe, y no puede, ser alterado.static

• Su valor se mantiene dentro de su ámbito.• Si global, sólo global al módulo.• Si local, conserva valor entre invocaciones.• Valor inicial 0.

register• Indica nuestra intención de ubicar la variable en un registro.• Es una pista para el compilador (no está garantizado).

volatile• El contenido de la variable podría cambiar de valor

espontáneamente por efecto de algo "externo" alprograma.

• Evita optimizaciones por parte del compilador en cuanto aacceso de memoria de la variable.

Jorge Peña Pastor Variables y Tipos 9/53

Page 11: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipos de Datos

Cada variable tiene que tener asociado un tipo que indique quées lo que contiene la variable.Determina qué opereaciones se pueden hacer sobre lavariable.Permite al compilador:

• Detectar errores• Optimizar la ejecución

Podrá ser uno de los tipos básicos proporcionados por ellenguaje o bien un tipo derivado creado por un programador.

Jorge Peña Pastor Variables y Tipos 10/53

Page 12: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipos de Datos

Se escoge según el conjunto de valores que queramos que lavariable pueda tomar.

• En algunos casos por las limitaciones del sistema.Los tipos numéricos básicos deteminan el rango de posiblesvalores

• Una variable de tipo Entero no podrá valer 3.75 (decimal).• Una variable de tipo Positivo (sin-signo) no podrá valer -1.

Jorge Peña Pastor Variables y Tipos 11/53

Page 13: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipos Básicos

Posibles contenidos de variables según el tipo con el quefueron declaradas:

Boleano: true, falseCarácter: a, A, z, Z, 1, 9, ...

Entero: −1, 33Real: 3.14, −5x10−15

Enumerado: lunes, martes ...Vectores: {4, 5, 9}, {H, o, l, a}Puntero: NULL

Jorge Peña Pastor Variables y Tipos 12/53

Page 14: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Entero

• Para contar o enumerar

int saldo_bancario = 1000;

• Diferentes bases de representación:

Hexadecimal(base 16): 0x0 -0x1 0xFFF 0xFea0Octal(base 8): 00 -01 07777 0177240Decimal(base 10): 0 -1 4095 65184

Jorge Peña Pastor Variables y Tipos 13/53

Page 15: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Modificadores de Enteros

De Signo:• signed: Valores positivos y negativos.

signed int var ; 32 bits : /∗−2147483648 a 2147483648∗/

• unsigned: Sólo valores positivos.

unsigned int var ; /∗32 bits : 0 a 4294967295∗/

Si no se indica nada es signed

int var ; 32 bits : /∗−2147483648 a 2147483648∗/

Jorge Peña Pastor Variables y Tipos 14/53

Page 16: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Modificadores de Enteros

De Signo:• signed: Valores positivos y negativos.

signed int var ; 32 bits : /∗−2147483648 a 2147483648∗/

• unsigned: Sólo valores positivos.

unsigned int var ; /∗32 bits : 0 a 4294967295∗/

Si no se indica nada es signed

int var ; 32 bits : /∗−2147483648 a 2147483648∗/

Jorge Peña Pastor Variables y Tipos 14/53

Page 17: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Modificadores de Enteros

De tamaño:• short

short int dia ; /∗ 16 bits (aprox) ∗/

• sin modificador (por defecto)

int horas; /∗ 32 bits ∗/

• long

long segundos; /∗ 32 bits (aprox) ∗/

• long long

long long micro_segundos; /∗ 64 bits (GNU C) ∗/

Jorge Peña Pastor Variables y Tipos 15/53

Page 18: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Modificadores de Enteros

Pueden combinarse para adaptarse a las necesidades denuestro problema:

signed long int variable ;unsigned short int variable ;

Puede omitirse el int

unsigned variable ;

El tamaño en memoria depende del compilador y de laarquitectura.Normalmente se usa simplemente int.

Jorge Peña Pastor Variables y Tipos 16/53

Page 19: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Booleano

Representa los valores lógicos cierto y falso.

bool hace_sol = true ;bool tengo_coche = false ;

Se utiliza para representar el resultado de operaciones lógicas(según el álgebra de Bool) y de comparación:

bool vamos_excursion = hace_sol && tengo_cochebool resultado = a > b;

Jorge Peña Pastor Variables y Tipos 17/53

Page 20: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Booleano

Representa los valores lógicos cierto y falso.

bool hace_sol = true ;bool tengo_coche = false ;

Se utiliza para representar el resultado de operaciones lógicas(según el álgebra de Bool) y de comparación:

bool vamos_excursion = hace_sol && tengo_cochebool resultado = a > b;

Jorge Peña Pastor Variables y Tipos 17/53

Page 21: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Carácter

Son valores numéricos de tamaño 1 byte (128 tipos).Representan caracteres según una convención dada (códigoASCII o Latin1).

• Constante entre comillas simples (apóstrofe ’)

char letra = ’a ’ ;

• Secuencias de escape:

char retorno = ’ \n ’ ;char tabulador = ’ \ t ’ ;

• Valor numérico:

char arroba = ’ \100 ’ ; /∗ Codigo ASCII de @ en octal∗/

Jorge Peña Pastor Variables y Tipos 18/53

Page 22: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Real

Números positivos o negativos con o sin decimales.También llamdos de “coma flotante”.Representación interna distinta a la del entero.Notación decimal o científica

Jorge Peña Pastor Variables y Tipos 19/53

Page 23: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipos de Reales

Tres tamaños:• float (precisión simple).

float medida = 2.3 f ;float distancia = 42E−11;

• double (doble precisión).

double valor = 4.22;

• long double (precisión extendida).

long double PI=3.14159265358979323846;

El valor exacto depende de cada implementación peronormalmente float 32 bits, double 64 y long double 128 bits.

Jorge Peña Pastor Variables y Tipos 20/53

Page 24: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Conversión de Tipos

¿Qué pasa cuando combinamos tipos diferentes?• int y float• int y bool• float y double

Existen 2 mecanismos:• Conversión automática• Conversión explícita

Jorge Peña Pastor Variables y Tipos 21/53

Page 25: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Conversión Automática

La hace automáticamente el compiladorEs segura siempre que sepamos que la conversión que va ahacer el compilador es la que nos interesa.Promoción

• De un “tipo” menor a un tipo “mayor”

float valor = 2; / / 2 se convierte en 2.0

Degradación

int valor = 2.2; / / 2.2 se convierte en 2

Jorge Peña Pastor Variables y Tipos 22/53

Page 26: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Conversión Explícita de Tipo

Casting: mecanismo para explicitar el cambio de tipo deuna expresión o variable.

Le indicamos al compilador que asumimos la responsabilidadExisten 2 formas:

• Castings de C:• (tipo)variable• tipo(variable)

• Castings de C++:• static_cast• dynamic_cast• const_cast• reinterpret_cast

Jorge Peña Pastor Variables y Tipos 23/53

Page 27: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ejemplos de Conversión de Tipos

float f = 65.2;float g = ( int ) 65.2; / / g vale 65.0float h = 3/2; / / h vale 1.0float i = ( float )3/( float )2 / / i vale 1.5float k = static_cast<int >(65.2); / / k = 65.0

Jorge Peña Pastor Variables y Tipos 24/53

Page 28: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Conversión de Bool

Las expresiones condicionales o booleanas, se conviertenautomáticamente utilizando las siguiente normas:

• Si la expresión vale 0, entonces es falso, si no, es cierto.• Los valores booleanos true y false se convierten en 1 y 0

cuando se hace el casting a int• Para pasar de int a bool se sigue la misma norma que para

las expresiones: 0 es false y el resto de enteros true

Jorge Peña Pastor Variables y Tipos 25/53

Page 29: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores Aritméticos

+ Suma- Resta* Multiplicación/ División

% Módulo (resto)++ Auto-incremento (pre ó post)

– Auto-decremento (pre ó post)

Jorge Peña Pastor Variables y Tipos 26/53

Page 30: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ejemplo Operadores Aritméticos

int a = 5 − (2 ∗ 2); int b; float f ;a++; /∗ a = a + 1 ∗/a=3; b=a++; /∗ a=4 b=3 ∗/a=3; b=++a; /∗ a=4 b=4 ∗/a=3; b=a−−; /∗ a=2 b=3 ∗/f =4/3; /∗ f == 1 Div . entera ∗/b=4%3; /∗ b == 1 == (4 − (4/3)∗3) ∗/f =4.0/3; /∗ f == 1.333 Div . real ∗/f =(float )4/3; /∗ f == 1.333 Div . real ∗/for ( int i =0; i <10; i ++) / / Realiza 10 veces el bucle

Jorge Peña Pastor Variables y Tipos 27/53

Page 31: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Asignación

Provienen de la combinación de operadores aritméticos con eloperador de asignación:

+=, -=, *=, /=, %=

Algunos ejemplos:

int a = 5, b = 2;a ∗= 2; /∗ a = a ∗ 2; a = 5 ∗ 2; a = 10 ∗/a /= b + 3; /∗ a = a / (b+3); a = 10 / (2+3); a = 2; ∗/

Jorge Peña Pastor Variables y Tipos 28/53

Page 32: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Comparación yLógicos

== Igual! = Distinto> Mayor

>= Mayor o igual< Menor

<= Menor o igual&& AND lógico|| OR lógico! NOT lógico

Jorge Peña Pastor Variables y Tipos 29/53

Page 33: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Comparación yLógicos

int a = 3, b= 2, c=4, d=1;i f (a>b) /∗ cierto ∗/i f (a>b | | a>c) /∗ cierto ∗/i f (a>b && c>d) /∗ cierto ∗/bool a = false ;I f (a == b) /∗ falso∗/i f ( !a) /∗ cierto ∗/

Jorge Peña Pastor Variables y Tipos 30/53

Page 34: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Comparación yLógicos

Se aplican sobre tipos booleanos. Toda expresión sirve deexpresión lógica considerándose:

• FALSA si la expresión se evalúa a CERO .• CIERTA si la expresión se evalúa a cualquier otro valor.

i f (a) /∗ Identico a: i f (a != 0) ∗/i f ( !b) /∗ Identico a: i f (b == 0) ∗/

El valor resultante de evaluar operadores lógicos es• 0 sii FALSO• 1 sii CIERTO

Jorge Peña Pastor Variables y Tipos 31/53

Page 35: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Comparación yLógicos

Es importante a la hora de evaluar una expresión lógica:• La precedencia de los operadores:

int a = (3>2 | | 5==4) && !1; /∗ a = 0 o FALSO) ∗/int b = (3>2 | | 5==4) && 7; /∗ b = 1 o CIERTO) ∗/

• La evaluación de expresiones lógicas es perezosa

int a = (3>2 | | b==4); /∗ b==4 NO se llega a evaluar ∗/

Jorge Peña Pastor Variables y Tipos 32/53

Page 36: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operador TernarioSii (A) entonces vale B, si no vale C

A ? B : C

En operador ternario nos permite reemplazar asignacionescondicionales. Así pues, en lugar de usar una estructura decontrol:

I f (num%2) {str = "par" ;} else {str = "impar" ;}

Podemos emplear el operador ternario para obtener el mismoresultado:

str = (num%2 ? "par" : "impar" ) ;

Jorge Peña Pastor Variables y Tipos 33/53

Page 37: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operador sizeof()

• Obtiene el número de bytes que ocupa (en memoria) unavariable o un tipo de datos

int a;i f (sizeof (a) == sizeof ( int ) ) /∗CIERTO∗/

• Devuelve un unsigned• Se obtiene durante la compilación• NO es función sino operador• Relaciones conocidas:

• 1 == sizeof(char) <= sizeof(short) <= sizeof(int) ==sizeof(unsigned) <= sizeof(long) <= sizeof(long long)

• sizeof(float) <= sizeof(double)

Jorge Peña Pastor Variables y Tipos 34/53

Page 38: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Operadores de Bit

& AND| OR^ XOR~ NOT

<< Desplazamiento a la izquierda>> Desplazamiento a la derecha

Jorge Peña Pastor Variables y Tipos 35/53

Page 39: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ejemplos Operador de Bit

unsigned char a = 48;

unsigned char b = 19;

unsigned char x = a & b;

unsigned char y = a | b;

unsigned char z = a ^ b;

unsigned char w = ~a;

unsigned char t = a >> 2;

unsigned char s = b << 3;

0 0 1 1 0 0 0 0 a

0 0 0 1 0 0 1 1 b

0 0 0 1 0 0 0 0 x = 16

0 0 1 1 0 0 1 1 y = 51

0 0 1 0 0 0 1 1 z = 35

1 1 0 0 1 1 1 1 w = 207

0 0 0 0 1 1 0 0 t = 12

1 0 0 1 1 0 0 0 s = 152

Jorge Peña Pastor Variables y Tipos 36/53

Page 40: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Precedencia y Asociación

¿Cómo se evalúan expresiones con múltiples operadores?

int res = 3+4∗6 /∗ (27 o 42) ∗/

Jorge Peña Pastor Variables y Tipos 37/53

Page 41: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Precedencia

Los operadores de cada filatienen mayor precedencia quelos de su fila inferior.Los operadores de cada filatienen la misma precedencia

(, ), [, ], .,++,−− (post)sizeof, ++,−−, (pre)∗, /,%+,−<<,>>

<,<=, >,>=

==, !=&^|&&||=, +=, -=, *=, /=, %=?, :

Jorge Peña Pastor Variables y Tipos 38/53

Page 42: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Asociación

Todos los operadores de asignación, los operadores unarios yel operador ternario son asociativos de derecha a izquierda.El resto de izquierda a derecha.

3+4+5+6; /∗ ((3+4)+5)+6 ∗/a=b=c=d; /∗ a=(b=(c=d)) ∗/a=b<c; /∗ a=(b<c) ∗/

Jorge Peña Pastor Variables y Tipos 39/53

Page 43: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Ejercicios

Preguntas

Jorge Peña Pastor Variables y Tipos 40/53

Page 44: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Arrays/Vectores

Agrupaciones de información homogénea.Se almacenan en memoria contigua.

• Son variables independientes.• Utilizan un mismo identificador para acceder a su

contenido.A cada elemento se accede con el operador []Se indexan con enteros desde el 0

int vector [2 ] ; / / Vector de 2 elementosvector [0] = 1; / / Primer elementovector [1] = 2; / / Segundo elementovector [2] = 3; / / Error : No existen 3 elementos

Jorge Peña Pastor Variables y Tipos 41/53

Page 45: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Copia de Arrays

Para copiar arrays es necesario realizar la copia de cada unode sus valores.

int a[2] , b[2 ] ;a = b; / / Operacion no permitidaa[0] = b[0 ] ;a[1] = b[1 ] ;

Jorge Peña Pastor Variables y Tipos 42/53

Page 46: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Inicialización de Arrays

Manual:

int a[2 ] ;a[0] = 1; a[1] = 2;

int a[4] = {0 ,1 ,2 ,3};

Automática:

int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}

int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias

Jorge Peña Pastor Variables y Tipos 43/53

Page 47: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Inicialización de Arrays

Manual:

int a[2 ] ;a[0] = 1; a[1] = 2;

int a[4] = {0 ,1 ,2 ,3};

Automática:

int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}

int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias

Jorge Peña Pastor Variables y Tipos 43/53

Page 48: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Inicialización de Arrays

Manual:

int a[2 ] ;a[0] = 1; a[1] = 2;

int a[4] = {0 ,1 ,2 ,3};

Automática:

int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}

int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias

Jorge Peña Pastor Variables y Tipos 43/53

Page 49: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Inicialización de Arrays

Manual:

int a[2 ] ;a[0] = 1; a[1] = 2;

int a[4] = {0 ,1 ,2 ,3};

Automática:

int a[ ] = {0 ,1}; /∗ a[2] = {0 ,1}

int a[4] = {1 ,2}; / / Las posiciones 2 y 3 vacias

Jorge Peña Pastor Variables y Tipos 43/53

Page 50: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Arrays de Varias Dimensiones

Se declaran concatenando varios []Se indexa en cada paso cada dimensiónSe inicializan de la misma forma que los arraysunidimensionales.

int a[2] [3 ] = { {1 ,2 ,3} , {4 ,5 ,6} } ;

Se declarar automáticamente el tamaño de la primeradimensión, pero no del resto.

int a[ ] [ 3 ] = { {1 ,2 ,3} , {4 ,5 ,6} } ;int b = a[0 ] [2 ] ; / / b contendra al valor 3int c = a[1 ] [1 ] ; / / c contendra al valor 5

Jorge Peña Pastor Variables y Tipos 44/53

Page 51: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Literales String

Tiras de Caracteres.Constantes entre comillas dobles.

"Esto es un string "

Sirven para inicializar arrays de tipo char• El último caracter siempre es el caracter nulo ’\0’• Necesitamos almacenar tantas variables de tipo char

como caracteres en nuestro literal + 1 del caracter nulo.

char nombre[4] = "Ana" ; /∗ nombre[4]={ ’A ’ , ’n ’ , ’a ’ , ’ \ 0 ’ } ; ∗/

Pero no para cambiar su valor una vez inicializados.

nombre = "Pedro" /∗ ERROR ∗/

Jorge Peña Pastor Variables y Tipos 45/53

Page 52: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Punteros

Tipo básico.Diferente a los que hemos visto hata ahora:

• El resto de los tipos almacenan datos relativos al cálculodel programa

• Los punteros almacenan direcciones de memoriaAsí pues, un puntero no almacene un dato, sino que apunta aél.

Puntero Dato

Jorge Peña Pastor Variables y Tipos 46/53

Page 53: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Punteros

Definición de variables de tipo puntero:• tipo *variable;

int ∗puntero_a_int , variable_int ;/∗ solo la primera variable es un puntero ∗/

Operador &:• Sirve para obtener la dirección de una variable.

puntero_a_int = &variable_int ;

Operador ∗:• Sirve para obtener el dato al que apunta una variable.

bool iguales = ∗puntero_a_int == variable_int ;

Jorge Peña Pastor Variables y Tipos 47/53

Page 54: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipos Definidos por elusuario

Jorge Peña Pastor Variables y Tipos 48/53

Page 55: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Tipo Enumerado

Es un tipo que puede contener un conjunto de valores definidopor el usuario.Se suele utilizar como una forma alternativa para definirconstantes.Existen dos formas de declararlos:

• especificando el nombre del tipo:

enum Mes {Enero, Febrero, . . , Diciembre } ;Mes mes_de_vacaciones;Mes mes_de_nacimiento;

• sin especificar el nombre del tipo:

enum {FEMENINO, MASCULINO} genero;

Jorge Peña Pastor Variables y Tipos 49/53

Page 56: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Representación Interna de losEnumerados

Internamente se representan como un entero:

enum Genero {FEMENINO=0, MASCULINO=1};

Se puede especificar el valor de cada elemento:

enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};

Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:

enum Mes {Enero=1, Febrero, . . , Diciembre } ;

Jorge Peña Pastor Variables y Tipos 50/53

Page 57: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Representación Interna de losEnumerados

Internamente se representan como un entero:

enum Genero {FEMENINO=0, MASCULINO=1};

Se puede especificar el valor de cada elemento:

enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};

Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:

enum Mes {Enero=1, Febrero, . . , Diciembre } ;

Jorge Peña Pastor Variables y Tipos 50/53

Page 58: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Representación Interna de losEnumerados

Internamente se representan como un entero:

enum Genero {FEMENINO=0, MASCULINO=1};

Se puede especificar el valor de cada elemento:

enum Mes {Enero=1, Febrero=2, . . , Diciembre=12};

Se puede especificar el valor del primer elemento, y el resto seasignan de forma consecutiva:

enum Mes {Enero=1, Febrero, . . , Diciembre } ;

Jorge Peña Pastor Variables y Tipos 50/53

Page 59: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

Definición de Nuevos Tipos

Permite dar semántica a las variables de un problema.

typedef float Grados;Grados temperatura = 26.5;

Facilita la lectura del código.

typedef const unsigned int ConstanteEnteraSinSigno;ConstanteEnteraSinSigno MAX_FILAS = 5;

Puede facilitar la portabilidad entre distintas plataformas.

Jorge Peña Pastor Variables y Tipos 51/53

Page 60: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:

struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;

Se pueden inicializar como los vectores:

Fecha hoy = {7 ,JUNIO, 2011, false } ;

Se accede a sus campos utilizando el operador . (punto):

aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;

Jorge Peña Pastor Variables y Tipos 52/53

Page 61: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:

struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;

Se pueden inicializar como los vectores:

Fecha hoy = {7 ,JUNIO, 2011, false } ;

Se accede a sus campos utilizando el operador . (punto):

aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;

Jorge Peña Pastor Variables y Tipos 52/53

Page 62: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

EstructurasAgrupaciones de información heterogénea almacenada enmemoria continua:

struct Fecha {int dia ;Mes mes;int ano;bool festivo ;} ;Fecha aniversario ;

Se pueden inicializar como los vectores:

Fecha hoy = {7 ,JUNIO, 2011, false } ;

Se accede a sus campos utilizando el operador . (punto):

aniversario .Mes = Febrero;bool esFestivo = hoy. festivo ;

Jorge Peña Pastor Variables y Tipos 52/53

Page 63: Curso C++: Variables y Tipos - Laboratorio SS.OO ...laurel.datsi.fi.upm.es/_media/docencia/cursos/cplusplus/variablesy... · Curso C++: Variables y Tipos ... El tamaño en memoria

UnionesSe declaran de forma similar a las estructuras.Sus campos comparten la misma memoria.Sólo permiten almacenar un valor (de cualquiera de sus tipos)a la vez.

struct Datos{int a, x [2 ] ;char c;} ;Datos d;

union Datos {int a, x [2 ] ;char c;} ;Datos d;

Jorge Peña Pastor Variables y Tipos 53/53