Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 24-09-2013.
Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.
-
Upload
belen-carrero -
Category
Documents
-
view
3 -
download
0
Transcript of Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.
![Page 1: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/1.jpg)
Informática IIProf. Dr. Gustavo PatiñoMJ 16- 1828-01-2014
![Page 2: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/2.jpg)
![Page 3: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/3.jpg)
![Page 4: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/4.jpg)
Conversión explícita de un tipo a otro
Tanto widening como narrowingEjemplo
int A; float B; A = A + (int)B
Typecasting ilimitado puede ser peligroso
![Page 5: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/5.jpg)
Conversiones sin pérdida de información
Ejemplos: integers a floats shorts a longs
![Page 6: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/6.jpg)
Conversiones que pueden perder información
Ejemplos: integers a chars longs a shorts
Raro en lenguajes
![Page 7: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/7.jpg)
C++ maneja conversiones automáticamente en el caso de tipos numéricos intrínsecos (int, double, float)
Mensajes de advertencia (warning) pueden aparecer cuando hay riesgo de perdida de información (precisión). Hay variaciones de un compilador a otro
Ejemplos...7
![Page 8: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/8.jpg)
8
int n = 26;double x = n;double x = 36;int b = x; // possible warningbool isOK = 1; // possible warningint n = true;char ch = 26; // possible warningint w = 'A';
![Page 9: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/9.jpg)
Una operación de “casteo” cast explícitamente convierte datos de un tipo a otro.
Es usado en conversiones “seguras” que podrían ser hechas por el compilador.
Son usadas para abolir mensajes de advertencia (warning messages).
El operador tradicional del C pone el nuevo tipo de dato entre paréntesis. C++ mejora esto con una operador cast tipo función.
Ejemplos...9
![Page 10: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/10.jpg)
10
int n = (int)3.5; // traditional Cint w = int(3.5); // estilo de funciónbool isOK = bool(15); char ch = char(86); // símbolo asciistring st = string("123");
// errors: no conversions available:int x = int("123"); string s = string(3.5);
double x=3.1415;char *p = (char*)&x; // para acceder a
//x byte por byte
![Page 11: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/11.jpg)
Una expresión de una clase es forzada como una clase ancestro cuando así se requiera Pero no al revés Llamado “up-casting” Siempre legal porque la subclase contiene todos los
campos de la superclase Down-casting
Esto es más permisivo Conversión explícita de una clase ancestro a una
clase descendiente Sólo tiene sentido si el objeto fue creado
inicialmente como en la subclase, pero después convertido a la superclase
No puede chequearse en tiempo de compilación.
![Page 12: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/12.jpg)
Consecuencia de up-casting Implementación del método declarado en una
superclase puede ser desconocida al momento de compilar.
El método es sobreescrito en una subclase. Variaciones de Lenguajes▪ Todos los métodos no declarados estáticos pueden ser
up-casted▪ Sólo los métodos declarados virtuales pueden ser up-
casted Análisis e implementación de métodos
dinámicos▪ No se puede efectuar ningún chequeo semántico▪ Necesitamos soporte en tiempo de corrida (runtime) al
generar el código
![Page 13: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/13.jpg)
El operador static_cast<> es la forma preferida para hacer conversiones “seguras” en C++.
Éste reemplaza ambos el operador tradicional de C y el estilo función de C++.
Existe también el dynamic_cast<>, éste asegura que el resultado de la conversión es un dato compatible. Sólo se aplica a punteros a objetos.
dynamic_cast<> lanza error cuando el resultado de la conversión no es un objeto completo de la clase requerida.
13
![Page 14: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/14.jpg)
14
int w = static_cast<int>(3.5);
bool isOK = static_cast<bool>(1);
char ch = static_cast<char>(86);
![Page 15: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/15.jpg)
15
int w = static_cast<int>(3.5);bool isOK = static_cast<bool>(1); char ch = static_cast<char>(86);
class CBase { };class CDerived: public CBase { };CBase b; CBase* pb;CDerived d; CDerived* pd;pb = dynamic_cast<CBase*>(&d); // ok: derived-to-basepd = dynamic_cast<CDerived*>(&b); // wrong: base-to-derived
![Page 16: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/16.jpg)
Ejemplo 2 de static_cast
Ejemplo 2 de static_cast
![Page 17: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/17.jpg)
![Page 18: Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.](https://reader036.fdocuments.net/reader036/viewer/2022062617/54d159ea4979594d2c8b458d/html5/thumbnails/18.jpg)