Cómo convertir tipos de datos en C++

Como Convertir Tipos De Datos En C



El proceso de cambiar el tipo de datos de una variable a otra se conoce como conversión de tipos o conversión de tipos en C++. Esto se hace para realizar operaciones matemáticas en las variables de diferentes tipos de datos, haciendo que sus tipos de datos sean compatibles entre sí. La conversión de tipos optimiza el código. Por ejemplo, al calcular la diferencia entre dos variables, si un número está en tipo flotante y el otro en tipo de datos entero, entonces el tipo de datos entero se convertirá a tipo flotante para realizar la resta.

Cómo convertir tipos de datos en C++

En C++, hay dos formas de cambiar los tipos de datos:

Conversión de tipo implícita

De acuerdo con las reglas predefinidas por el compilador de código C++, la conversión de tipo implícita es la conversión de tipo realizada por el compilador automáticamente sin necesidad de ningún activador externo por parte del usuario. Este tipo de conversión generalmente ocurre en un programa cuando hay más de un tipo de datos y el tipo de datos de la expresión no coincide con el tipo de datos de la variable involucrada en esta expresión.







Para evitar la pérdida de datos durante la conversión, el compilador cambia de forma predeterminada el tipo de datos de baja precisión por el tipo de datos de mayor precisión. Por ejemplo, convertirá un número entero en un flotante en lugar de cambiar el flotante a un número entero para evitar la pérdida de datos. A esto se le llama promoción. A continuación se muestra el diagrama de precedencia para los diferentes tipos de datos.





Orden de conversión de tipo

El orden correcto para la conversión de tipos es el siguiente:





booleano-- > carbón-- > int corto -- > En t -- > entero sin firmar -- > largo -- > largo sin firmar -- > largo largo -- > flotar -- > doble -- > doble largo

La variable de tipo de baja precisión se convierte al tipo de datos de alta precisión para evitar la pérdida de datos.

Ejemplo 1

En este ejemplo, la suma se realiza en la variable de diferentes tipos de datos mediante la conversión de tipos implícita.



#incluir
usando espacio de nombres enfermedad de transmisión sexual ;

En t principal ( ) {
                En t número = 100 ;
                carbonizarse personaje = 'C' ;
                corte << '100 + 'C' = ' << número + personaje << fin ;

                flotar vale = número + 'C' ;
                corte << 'valor flotante(100 + 'c') = ' << vale << fin ;

                En t era = 7890 ;
                largo no estaba = era ;
                corte << 'var_int=' << no estaba ;
                devolver 0 ;
}

Aquí se añaden un número entero y un carácter de la tabla ASCII, y un número flotante y el carácter 'c'. El número entero se mantiene en el tercer segmento como un tipo de datos largo y el propio compilador cambia los tipos de datos según sus reglas predefinidas.

La suma de 100 y 'C' devuelve 167 ya que 'C' equivale a 67 en números y 100+'c' devuelve 199 ya que 'c' minúscula equivale a 99. La variable int se almacena en un tipo de datos largo.

Ejemplo 2

En este ejemplo, el carácter D se convierte en un flotante para realizar la operación de división.

#incluir
usando espacio de nombres enfermedad de transmisión sexual ;

En t principal ( ) {
  carbonizarse X = 'D' ;

  flotar var_flotante ;

var_flotante =   flotar ( X ) / 'C' ;
  // Convirtiendo explícitamente un int en un float.

  corte << 'El valor de float_var es: ' << var_flotante << fin ;

  devolver 0 ;
}

El valor de entrada tiene la forma del carácter D que se almacena en el tipo de datos flotante y se divide aún más por el carácter C. Estos caracteres se cambian a valores numéricos y se realiza una operación de división sobre ellos, devolviendo el valor en flotante.

Conversión de tipo explícita

El usuario debe modificar manualmente el tipo de datos con la conversión de tipo explícita de C++, a menudo conocida como conversión de tipos. Este tipo de conversión se realiza para evitar la conversión de tipos implícita. Hay dos métodos para realizar la conversión de tipos explícita en C++:

  • Conversión utilizando el operador de asignación
  • Conversión usando el operador Cast

Conversión de tipos utilizando el operador de asignación en C++

La conversión de tipos mediante el operador de asignación se realiza de forma forzada, es decir, un tipo de datos se convierte a otro manualmente. Esto se logra usando el operador de asignación “=', que asigna el valor del operando derecho a la variable en su lado izquierdo.

Ejemplo
Este programa calcula el área del círculo mediante fundición tipográfica.

#incluir
#incluir
usando espacio de nombres enfermedad de transmisión sexual ;
En t principal ( )
{
    En t radio ;
    corte <> radio ;
    flotar área = M_PI * radio * radio ;
    corte << 'Área de un círculo con radio' << radio << ' = ' << área ;
}

El operador de asignación se utiliza para asignar el valor flotante al área, que consta del valor del radio en un tipo de datos entero.

El área del círculo se devuelve en tipo de datos flotante, mientras que el radio se ingresa en tipo de datos entero. Por lo tanto, el tipo de datos de la variable se cambia mediante conversión de tipos utilizando el operador de asignación.

Conversión de tipos utilizando el operador Cast en C++

La conversión de tipos se realiza mediante el uso de un operador de conversión, que obliga a un tipo de datos a cambiar a otro tipo según las necesidades del programa.

Hay cuatro operadores de reparto diferentes:

  • transmisión_estática
  • const_cast
  • transmisión_dinámica
  • reinterpretar_cast

1: transmisión estática

static_cast es el operador de conversión que se utiliza para convertir explícitamente flotantes y caracteres en números enteros, etc. Este es el operador de reparto más básico. Puede generar tipos de datos que sean de naturaleza similar. Puede convertir punteros de un formulario a otro, por lo que también se puede utilizar para la gestión de memoria.

Sintaxis

transmisión_estática   ( expresión )

Ejemplo
Este programa está diseñado para convertir una variable doble en un tipo de datos int usando static_cast. Cortará cualquier parte decimal en la salida.

#incluir
usando espacio de nombres enfermedad de transmisión sexual ;
En t principal ( )
{
    // declarar una variable
    doble pag ;
pag = 2.905 * 1.235 * 24.675 ;
    flotar resultado ;

    corte << 'Antes de usar la conversión estática:' << fin ;
    corte << ' El valor de p = ' << pag << fin ;

    // usa static_cast para convertir el tipo de datos
resultado = transmisión_estática   ( pag ) ;
    corte << ' Después de usar la conversión estática: ' << fin ;
    corte << ' El valor del resultado = ' << resultado << fin ;

    devolver 0 ;
}

Inicialmente, una variable doble p se carga con valores que se multiplican entre sí y se almacenan en el resultado. El resultado contiene el resultado antes y después del operador static_cast:

Antes de usar el operador static_cast, el resultado se muestra en puntos decimales, mientras que después de usar este operador se muestra en tipo de datos entero.

2: const_cast

El operador const_cast se utiliza para convertir un valor constante de un objeto al tipo no constante. Se utiliza cuando se declara un objeto constante y necesitamos cambiar su valor ocasionalmente.

Sintaxis

const_cast   ( expresión )

Ejemplo
En este ejemplo, el operador const_cast se utiliza para eliminar el calificador constante temporalmente y permite realizar cambios en la variable según la necesidad:

#incluir
usando espacio de nombres enfermedad de transmisión sexual ;
En t principal ( ) {
    constante En t X = 70 ;
    constante En t * y = & X ;
    corte << 'El valor anterior es ' << * y << ' \norte ' ;
    En t * Con = const_cast ( y ) ;
    * Con = 90 ;
    corte << 'El nuevo valor es ' << * y ;
    devolver 0 ;
}

El calificador constante se asigna a una variable int x, lo que significa que esta variable no se puede modificar directamente. Después de eso, int *y, que es un puntero, se usa para acceder a x, pero aún así no se puede cambiar y su valor original se muestra usando cout. Usando el operador const_cast, se crea un puntero z que no es constante, se usa para acceder al valor de x haciéndolo editable. Cambia el valor asignado a z con 90, lo que indirectamente cambia el valor en x.

Inicialmente, el valor de la variable constante x es 70, que se modifica utilizando el operador const_cast, convirtiéndolo en 90.

3: transmisión_dinámica

con la jerarquía de herencia, que también se conoce como abatido con seguridad de tipos. Downcast es el proceso de convertir una referencia o puntero a una clase derivada a partir de una referencia o puntero de clase base.

Sintaxis

transmisión_dinámica   ( expresión )

Ejemplo
En este ejemplo, el operador Dynamic_cast se utiliza para comprobar el tipo de clase polimórfica y permite el acceso a los miembros de la clase base y derivada.

#incluir
#incluir
usando espacio de nombres enfermedad de transmisión sexual ;
clase Base de datos
{
  público :
  flotar base_g = 9.81 ;

  virtual vacío ficticio ( )
  {

  } ;
} ;

clase TDerivado : público Base de datos
{
  público :
  En t local_g = 9.78 ;
} ;

En t principal ( )
{

Base de datos * base = nuevo TDerivado ;
TDerivado * derivado ;

derivado = transmisión_dinámica ( base ) ;

corte < base_g << fin ;
corte < local_g << fin ;

  obtenerchar ( ) ;
  devolver 0 ;
}

Se definen dos clases como clases base y derivadas. Se crea una base de puntero de tipo TBase* y se asigna a un objeto asignado dinámicamente de tipo TDerived. Un objeto de clase derivada se puede asignar a un puntero de clase base en este caso de polimorfismo. Dynamic_cast comprueba si el puntero accede al objeto válido de TDerived; si la conversión obtiene un resultado exitoso, la clase derivada obtendrá un resultado válido; de lo contrario, devolverá un valor nulo.

4: reinterpretar_cast

reinterpret_cast transforma un puntero de un tipo de datos en un puntero de un tipo de datos diferente. No comprueba si los tipos de datos de los punteros son los mismos o no. Este operador de fundición debe usarse y manipularse con cuidado.

Ejemplo
En esta ilustración, el puntero de un tipo de datos se reinterpreta en un puntero de otro tipo de datos mediante reinterpret_cast:

#incluir
usando espacio de nombres enfermedad de transmisión sexual ;

En t principal ( )
{
    En t * q = nuevo En t ( 70 ) ;
    carbonizarse * ch = reinterpretar_cast ( q ) ;
    corte << * q << fin ;
    corte << * ch << fin ;
    corte << q << fin ;
    corte << ch << fin ;
    devolver 0 ;
}

Inicialmente se asigna a un número entero el valor 70. El puntero q apunta a este número entero asignado dinámicamente. reinterpret_cast se utiliza para reinterpretar el puntero q como un puntero de carácter ch, lo que significa que la memoria originalmente asignada a q ahora se trata como si fuera un carácter. Usando el comando cout, imprime el valor asignado a q y ch. Dado que ch se trata como un puntero de carácter, devolverá un valor de carácter.

Imprime el valor apuntado a ch usando *ch. Sin embargo, dado que ch se trata como un puntero de carácter, esta línea interpretará la memoria como un carácter. Imprime la dirección de memoria almacenada en el puntero ch usando ch. Esta es la misma dirección de memoria que q porque es solo una reinterpretación de la misma memoria.

Inicialmente, el número entero almacena 70. Posteriormente, esto se manipula entre el puntero q y el puntero ch. Las salidas 2 y 4 son las mismas porque el segundo valor se reinterpreta usando reinterpret_cast.

Nota : Se sugiere no utilizar este operador de fundición hasta que sea muy necesario, ya que hace que el objeto sea un producto no portátil.

Conclusión

El proceso de cambiar el tipo de datos de una variable a otra se conoce como conversión de tipos o conversión de tipos en C++. Esto se hace para realizar operaciones matemáticas en las variables de diferentes tipos de datos, haciendo que sus tipos de datos sean compatibles entre sí. La conversión de tipos optimiza el código. Hay conversiones de tipos implícitas y explícitas en C++. La conversión de tipo implícita la lleva a cabo el propio compilador utilizando un conjunto predefinido de reglas, mientras que la conversión de tipo explícita la lleva a cabo el programador utilizando operadores de asignación y operadores de conversión.