Com convertir tipus de dades en C++

Com Convertir Tipus De Dades En C



El procés de canviar el tipus de dades d'una variable a una altra es coneix com a conversió de tipus o fosa de tipus en C++. Això es fa per realitzar operacions matemàtiques sobre les variables de diferents tipus de dades, fent que els seus tipus de dades siguin compatibles entre si. La conversió de tipus optimitza el codi. Per exemple, quan es calcula la diferència entre dues variables, si un nombre és en tipus flotant i l'altre en tipus de dades enter, llavors el tipus de dades enter es convertirà en tipus flotant per dur a terme la resta.

Com convertir tipus de dades en C++

En C++, hi ha dues maneres de canviar els tipus de dades:

Conversió de tipus implícita

D'acord amb les regles predefinides pel compilador de codi C++, la conversió implícita de tipus és la conversió de tipus realitzada pel compilador automàticament sense que l'usuari requereixi cap activador extern. Aquest tipus de conversió sol tenir lloc en un programa quan hi ha més d'un tipus de dades, i el tipus de dades d'expressió no coincideix amb el tipus de dades de la variable implicada en aquesta expressió.







Per evitar la pèrdua de dades durant la conversió, el compilador canvia per defecte el tipus de dades de precisió baixa amb el tipus de dades de precisió més alta. Per exemple, convertirà un nombre sencer en un nombre flotant en lloc de canviar-lo a un nombre sencer per evitar la pèrdua de dades. Això s'anomena promoció. A continuació es mostra el diagrama de precedències per als diferents tipus de dades.





Comanda per a la conversió de tipus

L'ordre correcte per a la conversió de tipus és el següent:





bool -- > char -- > curt int -- > int -- > int sense sign -- > llarg -- > llarg sense signar -- > llarg llarg -- > flotar -- > doble -- > doble llarg

La variable de tipus de baixa precisió es converteix en el tipus de dades d'alta precisió per evitar la pèrdua de dades.

Exemple 1

En aquest exemple, l'addició es realitza a la variable de diferents tipus de dades mitjançant la conversió de tipus implícita.



#inclou
utilitzant espai de noms std ;

int principal ( ) {
int nombre = 100 ;
char personatge = 'C' ;
cout << '100 + 'C' = ' << nombre + personatge << endl ;

flotar val = nombre + 'c' ;
cout << 'float val(100 + 'c') = ' << val << endl ;

int era = 7890 ;
llarg no era = era ;
cout << 'var_int = ' << no era ;
tornar 0 ;
}

Aquí s'afegeix un nombre enter i un caràcter de la taula ASCII, un nombre flotant i un caràcter 'c'. L'enter es manté al tercer segment com a tipus de dades llarg i els tipus de dades són canviats pel propi compilador en funció de les seves regles predefinides.

La suma de 100 i 'C' retorna 167, ja que la 'C' equival a 67 en nombres i 100+'c' retorna 199 com a 'c' minúscula equival a 99. La variable int s'emmagatzema en un tipus de dades llarg.

Exemple 2

En aquest exemple, el caràcter D es converteix en un flotant per realitzar l'operació de divisió.

#inclou
utilitzant espai de noms std ;

int principal ( ) {
char x = 'D' ;

flotar float_var ;

float_var = flotar ( x ) / 'c' ;
// Converteix explícitament un int en un flotant.

cout << 'El valor de float_var és: ' << float_var << endl ;

tornar 0 ;
}

El valor d'entrada té la forma del caràcter D que s'emmagatzema en el tipus de dades flotant i es divideix a més pel caràcter C. Aquests caràcters es canvien en valors numèrics i s'hi realitza una operació de divisió, retornant el valor en float.

Conversió de tipus explícita

L'usuari ha d'alterar manualment el tipus de dades amb la conversió de tipus explícita de C++, sovint coneguda com a conversió de tipus. Aquest tipus de fosa es fa per evitar la conversió de tipus implícita. Hi ha dos mètodes per dur a terme el càsting de tipus explícit en C++:

  • Conversió mitjançant l'operador d'assignació
  • Conversió mitjançant l'operador Cast

Conversió de tipus mitjançant l'operador d'assignació en C++

La conversió de tipus mitjançant l'operador d'assignació es fa amb força, és a dir, un tipus de dades es converteix manualment en un altre. Això s'aconsegueix utilitzant l'operador d'assignació '=', que assigna el valor de l'operand de la dreta a la variable del seu costat esquerre.

Exemple
Aquest programa calcula l'àrea del cercle utilitzant el tipus de fosa.

#inclou
#inclou
utilitzant espai de noms std ;
int principal ( )
{
int radi ;
cout <> radi ;
flotar zona = M_PI * radi * radi ;
cout << 'Àrea del cercle amb radi' << radi << ' = ' << zona ;
}

L'operador d'assignació s'utilitza per assignar el valor flotant a l'àrea, que consisteix en el valor del radi en tipus de dades enter.

L'àrea del cercle es retorna en tipus de dades flotant, mentre que el radi s'introdueix en tipus de dades enter. Així, el tipus de dades de la variable es canvia mitjançant l'emissió de tipus mitjançant l'operador d'assignació.

Conversió de tipus mitjançant l'operador Cast en C++

La conversió de tipus es fa mitjançant un operador de llançament, que obliga un tipus de dades a canviar a un altre segons les necessitats del programa.

Hi ha quatre operadors de repartiment diferents:

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpretar_cast

1: static_cast

El static_cast és l'operador de càsting que s'utilitza per convertir explícitament els flotants i els caràcters en nombres enters, etc. Aquest és l'operador de repartiment més bàsic. Pot emetre tipus de dades de naturalesa similar. Pot convertir punters d'un formulari a un altre, de manera que també es pot utilitzar per a la gestió de la memòria.

Sintaxi

static_cast ( expressió )

Exemple
Aquest programa està creat per convertir una variable doble en un tipus de dades int mitjançant static_cast. Tallarà qualsevol part decimal de la sortida.

#inclou
utilitzant espai de noms std ;
int principal ( )
{
// declara una variable
doble pàg ;
pàg = 2.905 * 1.235 * 24.675 ;
flotar resultat ;

cout << 'Abans d'utilitzar el repartiment estàtic:' << endl ;
cout << ' El valor de p = ' << pàg << endl ;

// utilitza static_cast per convertir el tipus de dades
resultat = static_cast ( pàg ) ;
cout << ' Després d'utilitzar la distribució estàtica: ' << endl ;
cout << ' El valor del resultat = ' << resultat << endl ;

tornar 0 ;
}

Inicialment, una variable doble p es carrega amb valors que es multipliquen entre si i s'emmagatzemen en el resultat. El resultat conté el resultat anterior i després de l'operador static_cast:

Abans d'utilitzar l'operador static_cast, el resultat es mostra en punts decimals, mentre que després d'utilitzar aquest operador es mostra en tipus de dades enter.

2: const_cast

L'operador const_cast s'utilitza per convertir un valor constant d'un objecte al tipus no constant. S'utilitza quan es declara un objecte constant i hem de canviar-ne el valor de tant en tant.

Sintaxi

const_cast ( expressió )

Exemple
En aquest exemple, l'operador const_cast s'utilitza per eliminar temporalment el qualificador constant i permet fer canvis a la variable segons la necessitat:

#inclou
utilitzant espai de noms std ;
int principal ( ) {
const int x = 70 ;
const int * i = & x ;
cout << 'El valor antic és' << * i << ' \n ' ;
int * Amb = const_cast ( i ) ;
* Amb = 90 ;
cout << 'El nou valor és' << * i ;
tornar 0 ;
}

El qualificador constant s'assigna a una variable int x, la qual cosa significa que aquesta variable no es pot modificar directament. Després d'això, int *y, que és un punter, s'utilitza per accedir a la x, però encara no es pot canviar i el seu valor original es mostra amb cout. Mitjançant l'operador const_cast, es crea un punter z que no és constant, s'utilitza per accedir al valor de x fent-lo editable. Canvia el valor assignat a z amb 90 que indirectament canvia el valor en x.

Inicialment, el valor de la variable constant x és 70, que es modifica mitjançant l'operador const_cast, fent-lo 90.

3: dynamic_cast

amb la jerarquia de l'herència, que també es coneix com a baixada segura de tipus. Downcasting és el procés de convertir una referència o un punter en una classe derivada d'una referència o punter de classe base.

Sintaxi

dynamic_cast ( expressió )

Exemple
En aquest exemple, l'operador dynamic_cast s'utilitza per comprovar el tipus de classe polimòrfica i permet l'accés tant als membres de la classe base com als derivats.

#include
#inclou
utilitzant espai de noms std ;
classe TBase
{
públic :
flotar base_g = 9.81 ;

virtual buit maniquí ( )
{

} ;
} ;

classe TDerivat : públic TBase
{
públic :
int local_g = 9.78 ;
} ;

int principal ( )
{

TBase * base = nou TDerivat ;
TDerivat * derivat ;

derivat = dynamic_cast ( base ) ;

cout < base_g << endl ;
cout < local_g << endl ;

getchar ( ) ;
tornar 0 ;
}

Es defineixen dues classes com a classes base i derivades. Es crea una base de punter de tipus TBase* i s'assigna a un objecte assignat dinàmicament de tipus TDerived. Un objecte de classe derivada es pot assignar a un punter de classe base en aquest cas de polimorfisme. El dynamic_cast comprova si el punter accedeix a l'objecte vàlid de TDerived, si el cast obté un resultat satisfactori, la classe derivada obtindrà un resultat vàlid en cas contrari retornarà un valor nul.

4: reinterpretar_cast

El reinterpret_cast transforma un punter d'un tipus de dades en un punter d'un tipus de dades diferent. No comprova si els tipus de dades dels punters són els mateixos o no. Aquest operador de fosa s'ha d'utilitzar i manipular amb cura.

Exemple
En aquesta il·lustració, el punter d'un tipus de dades es reinterpreta en un punter d'un altre tipus de dades mitjançant el reinterpret_cast:

#inclou
utilitzant espai de noms std ;

int principal ( )
{
int * q = nou int ( 70 ) ;
char * cap = reinterpretar_cast ( q ) ;
cout << * q << endl ;
cout << * cap << endl ;
cout << q << endl ;
cout << cap << endl ;
tornar 0 ;
}

Inicialment, s'assigna un nombre enter amb el valor 70. El punter q apunta a aquest nombre enter assignat dinàmicament. El reinterpret_cast s'utilitza per reinterpretar el punter q com un punter de caràcter ch, el que significa que la memòria originalment assignada a q ara es tracta com si fos un caràcter. Mitjançant l'ordre cout, imprimeix el valor assignat a q i ch. Com que ch es tracta com un punter de caràcter, retornarà un valor de caràcter.

Imprimeix el valor apuntat a ch amb *ch. Tanmateix, com que ch es tracta com un punter de caràcter, aquesta línia interpretarà la memòria com un caràcter. Imprimeix l'adreça de memòria emmagatzemada al punter ch amb ch. Aquesta és la mateixa adreça de memòria que q perquè és només una reinterpretació de la mateixa memòria.

Inicialment, l'enter emmagatzema 70. Més tard, això es manipula entre el punter q i el punter ch. Les sortides 2 i 4 són iguals perquè el segon valor es reinterpreta mitjançant reinterpret_cast.

Nota : es recomana no utilitzar aquest operador de llançament fins i tret que sigui molt necessari, ja que fa que l'objecte sigui un producte no portàtil.

Conclusió

El procés de canviar el tipus de dades d'una variable a una altra es coneix com a conversió de tipus o fosa de tipus en C++. Això es fa per realitzar operacions matemàtiques sobre les variables de diferents tipus de dades, fent que els seus tipus de dades siguin compatibles entre si. La conversió de tipus optimitza el codi. Hi ha conversions de tipus implícites i explícites en C++. La conversió de tipus implícita la porta a terme el propi compilador mitjançant un conjunt de regles predefinits, mentre que la conversió de tipus explícita la realitza el programador mitjançant operadors d'assignació i operadors de llançament.