Operadores de fundição C ++
Uma conversão é um operador especial que força um tipo de dados a ser convertido em outro. Como um operador, um elenco é unário e tem a mesma precedência que qualquer outro operador unário.
O elenco mais geral suportado pela maioria dos compiladores C ++ é o seguinte -
(type) expression
Onde tipo é o tipo de dados desejado. Existem outros operadores de casting suportados pelo C ++, eles estão listados abaixo -
const_cast<type> (expr)- O operador const_cast é usado para substituir explicitamente const e / ou volatile em uma conversão. O tipo de destino deve ser o mesmo que o tipo de origem, exceto pela alteração de seus atributos const ou volatile. Este tipo de fundição manipula o atributo const do objeto passado, para ser definido ou removido.
dynamic_cast<type> (expr)- O dynamic_cast executa um cast em tempo de execução que verifica a validade do cast. Se a conversão não puder ser feita, a conversão falha e a expressão é avaliada como nula. Um dynamic_cast executa casts em tipos polimórficos e pode lançar um ponteiro A * em um ponteiro B * apenas se o objeto que está sendo apontado realmente for um objeto B.
reinterpret_cast<type> (expr)- O operador reinterpret_cast altera um ponteiro para qualquer outro tipo de ponteiro. Também permite a conversão de um ponteiro para um tipo inteiro e vice-versa.
static_cast<type> (expr)- O operador static_cast executa uma conversão não polimórfica. Por exemplo, ele pode ser usado para converter um ponteiro de classe base em um ponteiro de classe derivada.
Todos os operadores de fundição mencionados acima serão usados durante o trabalho com classes e objetos. Por enquanto, tente o exemplo a seguir para entender os operadores de conversão simples disponíveis em C ++. Copie e cole o seguinte programa C ++ no arquivo test.cpp e compile e execute este programa.
#include <iostream>
using namespace std;
main() {
double a = 21.09399;
float b = 10.20;
int c ;
c = (int) a;
cout << "Line 1 - Value of (int)a is :" << c << endl ;
c = (int) b;
cout << "Line 2 - Value of (int)b is :" << c << endl ;
return 0;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Line 1 - Value of (int)a is :21
Line 2 - Value of (int)b is :10