Esta seção discutirá a conversão de tipo das variáveis na linguagem de programação C++. A conversão de tipo refere-se à conversão de um tipo de dados para outro em um programa. A conversão de tipo pode ser feita de duas maneiras: automaticamente pelo compilador e manualmente pelo programador ou usuário. A conversão de tipo também é conhecida como conversão de tipo.
Por exemplo, suponha que os dados fornecidos sejam do tipo inteiro e queremos convertê-los para o tipo float. Portanto, precisamos converter manualmente os dados int para o tipo float, e esse tipo de conversão é chamado de conversão de tipo em C++.
int num = 5; float x; x = float(num); x = 5.0
2eexemplo:
float num = 5.25; int x; x = int(num); Output: 5
A conversão de tipo é dividida em dois tipos: conversão implícita ou conversão de tipo implícita e conversão de tipo explícita ou conversão de tipo explícita.
Casting de tipo implícito ou conversão de tipo implícito
- É conhecido como fundição automática de tipo.
- Ele converteu automaticamente de um tipo de dados para outro sem qualquer intervenção externa, como programador ou usuário. Isso significa que o compilador converte automaticamente um tipo de dados para outro.
- Todos os tipos de dados são atualizados automaticamente para o maior tipo sem perder nenhuma informação.
- Só pode ser aplicado em um programa se ambas as variáveis forem compatíveis entre si.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Nota: A conversão de tipo implícita deve ser feita de tipos de dados inferiores para superiores. Caso contrário, afeta o tipo de dados fundamental, que pode perder precisão ou dados, e o compilador pode emitir um aviso nesse sentido.
Programa para usar a conversão de tipo implícita em C++
Vamos criar um exemplo para demonstrar a conversão de uma variável para outra usando a conversão implícita de tipo em C++.
#include using namespace std; int main () { short x = 200; int y; y = x; cout << ' Implicit Type Casting ' << endl; cout << ' The value of x: ' << x << endl; cout << ' The value of y: ' << y << endl; int num = 20; char ch = 'a'; int res = 20 + 'a'; cout << ' Type casting char to int data type ('a' to 20): ' << res << endl; float val = num + 'A'; cout << ' Type casting from int data to float type: ' << val << endl; return 0; }
Saída:
Implicit Type Casting The value of x: 200 The value of y: 200 Type casting char to int data type ('a' to 20): 117 Type casting from int data to float type: 85
No programa acima, declaramos uma variável curta de tipo de dados x é 200 e uma variável inteira y. Depois disso, atribuímos o valor x a y e, em seguida, o compilador converte automaticamente o valor curto dos dados x em y, que retorna y é 200.
Nas próximas expressões, declaramos uma variável do tipo int num é 20, e a variável do tipo de caracter ch é 'a', que é equivalente a um valor inteiro de 97. E então, adicionamos essas duas variáveis para realizar a conversão implícita, que retorna o resultado da expressão é 117.
Da mesma forma, na terceira expressão, adicionamos a variável inteira num é 20 e a variável de caractere ch é 65 e, em seguida, atribuímos o resultado à variável flutuante val. Assim, o resultado da expressão é automaticamente convertido para o tipo float pelo compilador.
Casting de tipo explícito ou conversão de tipo explícito
- Também é conhecido como conversão manual de tipo em um programa.
- É convertido manualmente pelo programador ou usuário para mudar de um tipo de dados para outro em um programa. Isso significa que um usuário pode facilmente converter um dado em outro de acordo com os requisitos de um programa.
- Não requer verificação da compatibilidade das variáveis.
- Nesta conversão, podemos atualizar ou fazer downgrade do tipo de dados de uma variável para outra em um programa.
- Ele usa o operador cast() para alterar o tipo de uma variável.
Sintaxe da conversão de tipo explícita
(type) expression;
tipo: Representa os dados definidos pelo usuário que convertem a expressão fornecida.
expressão: Representa o valor constante, variável ou uma expressão cujo tipo de dados é convertido.
Por exemplo, temos um número apontador flutuante que é 4,534 e, para converter um valor inteiro, a instrução é:
int num; num = (int) 4.534; // cast into int data type cout << num;
Quando as instruções acima são executadas, o valor de ponto flutuante será convertido em um tipo de dados inteiro usando o operador cast (). E o valor flutuante é atribuído a um número inteiro que trunca a parte decimal e exibe apenas 4 como valor inteiro.
Programa para demonstrar o uso da conversão explícita de tipos em C++
Vamos criar um programa simples para converter uma variável de tipo em outro tipo usando a conversão explícita de tipo na linguagem de programação C++.
o que significa Google
#include using namespace std; int main () { // declaration of the variables int a, b; float res; a = 21; b = 5; cout << ' Implicit Type Casting: ' << endl; cout << ' Result: ' << a / b << endl; // it loses some information cout << ' Explicit Type Casting: ' << endl; // use cast () operator to convert int data to float res = (float) 21 / 5; cout << ' The value of float variable (res): ' << res << endl; return 0; }
Saída:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
No programa acima, pegamos duas variáveis inteiras, a e b, cujos valores são 21 e 2. E então, dividimos a por b (21/2) que retorna um valor do tipo 4 int.
Na segunda expressão, declaramos uma variável do tipo float res que armazena os resultados de aeb sem perder nenhum dado usando o operador cast no método cast de tipo explícito.
Programa para converter dados duplos em tipos int e float usando o operador cast
Vamos considerar um exemplo para obter a área do retângulo convertendo dados duplos em tipos float e int na programação C++.
#include using namespace std; int main () { // declaration of the variables double l, b; int area; // convert double data type to int type cout << ' The length of the rectangle is: ' <> l; cout << ' The breadth of the rectangle is: ' <> b; area = (int) l * b; // cast into int type cout << ' The area of the rectangle is: ' << area << endl; float res; // convert double data type to float type cout << ' The length of the rectangle is: ' << l << endl; cout << ' The breadth of the rectangle is: ' << b << endl; res = (float) l * b; // cast into float type cout << ' The area of the rectangle is: ' << res; return 0; }
Saída:
The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 740 The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 744.77
Alguns tipos diferentes de Type Casting
No type cast, existe um operador cast que força a conversão de um tipo de dados em outro tipo de dados de acordo com as necessidades do programa. C++ possui quatro tipos diferentes de operador de conversão:
- Static_cast
- elenco_dinâmico
- const_cast
- reinterpretar_cast
Elenco estático:
O static_cast é uma conversão simples em tempo de compilação que converte ou converte um tipo de dados em outro. Isso significa que não verifica o tipo de dados em tempo de execução se a conversão realizada é válida ou não. Assim o programador ou usuário tem a responsabilidade de garantir que a conversão foi segura e válida.
O static_cast é capaz o suficiente para realizar todas as conversões realizadas pelo cast implícito. E também realiza as conversões entre ponteiros de classes relacionadas entre si (upcast - > da classe derivada para a classe base ou downcast - > da classe base para a classe derivada).
Sintaxe do elenco estático
static_cast (expression);
Programa para demonstrar o uso do Static Cast
Vamos criar um exemplo simples para usar a conversão estática da conversão de tipo na programação C++.
#include using namespace std; int main () { // declare a variable double l; l = 2.5 * 3.5 * 4.5; int tot; cout << ' Before using the static cast:' << endl; cout << ' The value of l = ' << l << endl; // use the static_cast to convert the data type tot = static_cast (l); cout << ' After using the static cast: ' << endl; cout << ' The value of tot = ' << tot << endl; return 0; }
Saída:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Elenco Dinâmico
O dynamic_cast é um operador de conversão de tempo de execução usado para realizar a conversão de uma variável de tipo para outra apenas em ponteiros e referências de classe. Significa que verifica a conversão válida das variáveis em tempo de execução e, se a conversão falhar, retorna um valor NULL. A conversão dinâmica é baseada no mecanismo RTTI (Runtime Type Identification).
Programa para demonstrar o uso do Dynamic Cast em C++
Vamos criar um programa simples para realizar o dynamic_cast na linguagem de programação C++.
#include using namespace std; class parent { public: virtual void print() { } }; class derived: public parent { }; int main () { // create an object ptr parent *ptr = new derived; // use the dynamic cast to convert class data derived* d = dynamic_cast (ptr); // check whether the dynamic cast is performed or not if ( d != NULL) { cout << ' Dynamic casting is done successfully'; } else { cout << ' Dynamic casting is not done successfully'; } }
Saída:
Dynamic casting is done successfully.
Reinterpretar o tipo de elenco
A conversão do tipo reinterpret_cast é usada para converter um ponteiro para qualquer outro tipo de ponteiro, independentemente de o ponteiro fornecido pertencer um ao outro ou não. Significa que não verifica se o ponteiro ou os dados apontados pelo ponteiro são iguais ou não. E também lança um ponteiro para um tipo inteiro ou vice-versa.
Sintaxe do tipo reinterpret_cast
reinterpret_cast expression;
Programa para usar o Reinterpret Cast em C++
Vamos escrever um programa para demonstrar a conversão de um ponteiro utilizando a reinterpretação em linguagem C++.
#include using namespace std; int main () { // declaration of the pointer variables int *pt = new int (65); // use reinterpre_cast operator to type cast the pointer variables char *ch = reinterpret_cast (pt); cout << ' The value of pt: ' << pt << endl; cout << ' The value of ch: ' << ch << endl; // get value of the defined variable using pointer cout << ' The value of *ptr: ' << *pt << endl; cout << ' The value of *ch: ' << *ch << endl; return 0; }
Saída:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Elenco constante
O const_cast é usado para alterar ou manipular o comportamento const do ponteiro de origem. Isso significa que podemos realizar const de duas maneiras: definindo um ponteiro const para um ponteiro não-const ou excluindo ou removendo o const de um ponteiro const.
Sintaxe do tipo Const Cast
const_cast exp;
Programa para usar o Const Cast em C++
Vamos escrever um programa para converter um ponteiro de origem para um ponteiro não convertido usando const_cast em C++.
#include using namespace std; // define a function int disp(int *pt) { return (*pt * 10); } int main () { // declare a const variable const int num = 50; const int *pt = # // get the address of num // use const_cast to chnage the constness of the source pointer int *ptr = const_cast (pt); cout << ' The value of ptr cast: ' << disp(ptr); return 0; }
Saída:
The value of ptr cast: 500