La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014.

Presentaciones similares


Presentación del tema: "Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014."— Transcripción de la presentación:

1 Informática II Prof. Dr. Gustavo Patiño MJ

2

3

4 Conversión explícita de un tipo a otro Tanto widening como narrowing Ejemplo int A; float B; A = A + (int)B Typecasting ilimitado puede ser peligroso

5 Conversiones sin pérdida de información Ejemplos: integers a floats shorts a longs

6 Conversiones que pueden perder información Ejemplos: integers a chars longs a shorts Raro en lenguajes

7 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

8 8 int n = 26; double x = n; double x = 36; int b = x; // possible warning bool isOK = 1; // possible warning int n = true; char ch = 26; // possible warning int w = 'A';

9 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

10 10 int n = (int)3.5; // traditional C int w = int(3.5); // estilo de función bool isOK = bool(15); char ch = char(86); // símbolo ascii string 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

11 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.

12 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

13 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

14 14 int w = static_cast (3.5); bool isOK = static_cast (1); char ch = static_cast (86);

15 15 int w = static_cast (3.5); bool isOK = static_cast (1); char ch = static_cast (86); class CBase { }; class CDerived: public CBase { }; CBase b; CBase* pb; CDerived d; CDerived* pd; pb = dynamic_cast (&d); // ok: derived-to-base pd = dynamic_cast (&b); // wrong: base-to-derived

16 Ejemplo 2 de static_cast Ejemplo 2 de static_cast

17

18


Descargar ppt "Informática II Prof. Dr. Gustavo Patiño MJ 16- 18 28-01-2014."

Presentaciones similares


Anuncios Google