Kā konvertēt datu tipus programmā C++

Ka Konvertet Datu Tipus Programma C



Viena mainīgā datu veida maiņas process citā C++ valodā ir pazīstams kā tipa konvertēšana vai tipa liešana. Tas tiek darīts, lai veiktu matemātiskas darbības ar dažādu datu tipu mainīgajiem lielumiem, padarot to datu tipus savstarpēji saderīgus. Tipa konvertēšana optimizē kodu. Piemēram, aprēķinot atšķirību starp diviem mainīgajiem, ja viens skaitlis ir peldošā tipa, bet otrs ir vesela skaitļa datu tips, tad vesela skaitļa datu tips tiks pārveidots par peldošo tipu, lai veiktu atņemšanu.

Kā konvertēt datu tipus programmā C++

Programmā C++ ir divi veidi, kā mainīt datu tipus:

Netieša veida konvertēšana

Saskaņā ar C++ koda kompilatora iepriekš definētajiem noteikumiem implicītā tipa konvertēšana ir tipa konvertēšana, ko kompilators veic automātiski, neprasot nekādu ārēju aktivizētāju no lietotāja. Šāda veida konvertēšana parasti notiek programmā, ja ir vairāk nekā viens datu tips un izteiksmes datu tips neatbilst šajā izteiksmē iesaistītā mainīgā datu tipam.







Lai izvairītos no datu zuduma konvertēšanas laikā, kompilators pēc noklusējuma maina zemas precizitātes datu tipu ar augstākas precizitātes datu tipu. Piemēram, lai novērstu datu zudumu, tas pārveidos veselu skaitli peldošā skaitļā, nevis mainīs pludiņu par veselu skaitli. To sauc par veicināšanu. Tālāk ir parādīta dažādu datu tipu prioritātes diagramma.





Pasūtījums tipa pārveidošanai

Pareizā secība tipa pārveidošanai ir norādīta šādi:





bool -- > char -- > īss int -- > int -- > neparakstīts int -- > garš -- > neparakstīts garš -- > garš garš -- > peldēt -- > dubultā -- > garš dubultā

Zemas precizitātes tipa mainīgais tiek pārveidots par augstas precizitātes datu tipu, lai novērstu datu zudumu.

1. piemērs

Šajā piemērā pievienošana tiek veikta dažādu datu tipu mainīgajam, izmantojot netiešo tipa konvertēšanu.



#include
izmantojot nosaukumvieta std ;

starpt galvenais ( ) {
starpt numuru = 100 ;
char raksturs = 'C' ;
cout << '100 + 'C' = ' << numuru + raksturs << endl ;

peldēt val = numuru + 'c' ;
cout << 'float val(100 + 'c') = ' << val << endl ;

starpt bija = 7890 ;
garš Nebija = bija ;
cout << 'var_int =' << Nebija ;
atgriezties 0 ;
}

Šeit tiek pievienots vesels skaitlis un rakstzīme no ASCII tabulas, kā arī peldošais skaitlis un rakstzīme “c”. Vesels skaitlis tiek saglabāts trešajā segmentā kā garš datu tips, un datu tipus maina pats kompilators, pamatojoties uz iepriekš definētajiem noteikumiem.

Summa 100 un “C” atgriež 167, jo “C” ir vienāds ar 67 skaitļos, un 100+”c” atgriež 199, jo mazie burti “c” ir vienādi ar 99. Mainīgais int tiek saglabāts garā datu tipā.

2. piemērs

Šajā piemērā rakstzīme D tiek pārveidota par pludiņu, lai veiktu dalīšanas darbību.

#include
izmantojot nosaukumvieta std ;

starpt galvenais ( ) {
char x = 'D' ;

peldēt float_var ;

float_var = peldēt ( x ) / 'c' ;
// Skaidra int pārvēršana par pludiņu.

cout << 'Float_var vērtība ir: ' << float_var << endl ;

atgriezties 0 ;
}

Ievades vērtība ir rakstzīmes D formā, kas tiek saglabāta peldošā datu veidā un tālāk dalīta ar rakstzīmi C. Šīs rakstzīmes tiek pārveidotas par skaitliskām vērtībām un tiek veikta dalīšanas darbība, atgriežot vērtību peldošā formātā.

Skaidra veida pārvēršana

Lietotājam manuāli jāmaina datu tips, izmantojot C++ precīzo tipa konvertēšanu, ko bieži sauc par tipa apraidi. Šāda veida liešana tiek veikta, lai izvairītos no netiešas tipa pārveidošanas. Ir divas metodes, kā veikt skaidru tipu apraidi programmā C++:

  • Konvertēšana, izmantojot piešķiršanas operatoru
  • Konvertēšana, izmantojot Cast operatoru

Ierakstiet Conversion, izmantojot C++ piešķīruma operatoru

Tipa konvertēšana, izmantojot piešķiršanas operatoru, tiek veikta piespiedu kārtā, tas ir, viens datu tips tiek pārveidots par citu manuāli. To panāk, izmantojot piešķiršanas operatoru “=”, kas piešķir labās puses operanda vērtību mainīgajam tā kreisajā pusē.

Piemērs
Šī programma aprēķina apļa laukumu, izmantojot tipa liešanu.

#include
#include
izmantojot nosaukumvieta std ;
starpt galvenais ( )
{
starpt rādiuss ;
cout <> rādiuss ;
peldēt apgabalā = M_PI * rādiuss * rādiuss ;
cout << 'Apļa laukums ar rādiusu' << rādiuss << '=' << apgabalā ;
}

Piešķiršanas operators tiek izmantots, lai apgabalam piešķirtu peldošo vērtību, kas sastāv no rādiusa vērtības vesela skaitļa datu tipā.

Apļa laukums tiek atgriezts peldošā datu veidā, bet rādiuss tiek ievadīts vesela skaitļa datu tipā. Tādējādi mainīgā datu tips tiek mainīts, izmantojot tipa apraidi, izmantojot piešķiršanas operatoru.

Ierakstiet Conversion, izmantojot apraides operatoru programmā C++

Tipa konvertēšana tiek veikta, izmantojot cast operatoru, kas liek vienam datu tipam mainīties uz citu tipu atbilstoši programmas vajadzībām.

Ir četri dažādi apraides operatori:

  • static_cast
  • const_cast
  • dinamiskā_apraide
  • reinterpret_cast

1: static_cast

Static_cast ir liešanas operators, ko izmanto, lai nepārprotami pārvērstu pludiņus un rakstzīmes veselos skaitļos un tā tālāk. Šis ir visvienkāršākais apraides operators. Tas var nodot datu tipus, kas pēc būtības ir līdzīgi. Tas var pārvērst norādes no vienas formas uz citu, tāpēc to var izmantot arī atmiņas pārvaldībai.

Sintakse

static_cast ( izteiksme )

Piemērs
Šī programma ir izveidota, lai pārveidotu dubulto mainīgo par int datu tipu, izmantojot static_cast. Tas izvadā nogriezīs jebkuru decimāldaļu.

#include
izmantojot nosaukumvieta std ;
starpt galvenais ( )
{
// deklarēt mainīgo
dubultā lpp ;
lpp = 2905 * 1235 * 24 675 ;
peldēt rezultāts ;

cout << 'Pirms statiskās apraides izmantošanas:' << endl ;
cout << ' P vērtība = ' << lpp << endl ;

// izmantojiet static_cast, lai konvertētu datu tipu
rezultāts = static_cast ( lpp ) ;
cout << 'Pēc statiskās apraides izmantošanas:' << endl ;
cout << ' Rezultāta vērtība = ' << rezultāts << endl ;

atgriezties 0 ;
}

Sākotnēji dubultais mainīgais p tiek ielādēts ar vērtībām, kuras reizina viena ar otru un tiek saglabātas rezultātā. Rezultāts satur rezultātu pirms un pēc operatora static_cast:

Pirms static_cast operatora izmantošanas rezultāts tiek parādīts decimālpunktos, savukārt pēc šī operatora izmantošanas tiek parādīts vesela skaitļa datu veidā.

2: const_cast

Operatoru const_cast izmanto, lai konvertētu objekta nemainīgu vērtību uz nekonstantu tipu. To izmanto, ja tiek deklarēts konstants objekts, un mums laiku pa laikam ir jāmaina tā vērtība.

Sintakse

const_cast ( izteiksme )

Piemērs
Šajā piemērā operators const_cast tiek izmantots, lai īslaicīgi noņemtu konstanto kvalifikatoru un ļauj veikt izmaiņas mainīgajā atbilstoši nepieciešamībai:

#include
izmantojot nosaukumvieta std ;
starpt galvenais ( ) {
konst starpt x = 70 ;
konst starpt * un = & x ;
cout << 'Vecā vērtība ir' << * un << ' \n ' ;
starpt * Ar = const_cast ( un ) ;
* Ar = 90 ;
cout << 'Jaunā vērtība ir' << * un ;
atgriezties 0 ;
}

Pastāvīgais kvalifikators tiek piešķirts int mainīgajam x, kas nozīmē, ka šo mainīgo nevar tieši mainīt. Pēc tam int *y, kas ir rādītājs, tiek izmantots, lai piekļūtu x, taču to nevar mainīt, un tā sākotnējā vērtība tiek parādīta, izmantojot cout. Izmantojot operatoru const_cast, tiek izveidots rādītājs z, kas nav nemainīgs un tiek izmantots, lai piekļūtu x vērtībai, padarot to rediģējamu. Tas maina z piešķirto vērtību ar 90, kas netieši maina vērtību x.

Sākotnēji nemainīgā mainīgā x vērtība ir 70, kas tiek modificēta, izmantojot operatoru const_cast, padarot to par 90.

3: dynamic_cast

ar mantojuma hierarhiju, kas tiek saukta arī par tipa drošu pazemināšanu. Lejuplādēšana ir atsauces vai rādītāja pārvēršana atvasinātā klasē no bāzes klases atsauces vai rādītāja.

Sintakse

dinamiskā_apraide ( izteiksme )

Piemērs
Šajā piemērā operators dynamic_cast tiek izmantots, lai pārbaudītu polimorfās klases veidu, un tas ļauj piekļūt gan bāzes, gan atvasinātajiem klases dalībniekiem.

#include
#iekļaut
izmantojot nosaukumvieta std ;
klasē TBase
{
publiski :
peldēt bāze_g = 9.81 ;

virtuāls nederīgs manekens ( )
{

} ;
} ;

klasē TAtvasināts : publiski TBase
{
publiski :
starpt vietējais_g = 9.78 ;
} ;

starpt galvenais ( )
{

TBase * bāze = jauns TAtvasināts ;
TAtvasināts * atvasināts ;

atvasināts = dinamiskā_apraide ( bāze ) ;

cout < bāze_g << endl ;
cout < vietējais_g << endl ;

getchar ( ) ;
atgriezties 0 ;
}

Divas klases ir definētas kā bāzes un atvasinātās klases. Tiek izveidota TBase* tipa rādītāja bāze un piešķirta dinamiski piešķirtam TDerived tipa objektam. Šajā polimorfisma gadījumā bāzes klases rādītājam var piešķirt atvasinātu klases objektu. Dynamic_cast pārbauda, ​​vai rādītājs piekļūst derīgajam TDerived objektam; ja apraide iegūst veiksmīgu rezultātu, atvasinātā klase iegūs derīgu rezultātu, pretējā gadījumā tā atgriezīs nulles vērtību.

4: reinterpret_cast

Reinterpret_cast pārveido viena datu tipa rādītāju par cita veida datu rādītāju. Tas nepārbauda, ​​vai rādītāju datu tipi ir vienādi vai nē. Šis liešanas operators ir jāizmanto un ar to jārīkojas uzmanīgi.

Piemērs
Šajā ilustrācijā viena datu tipa rādītājs tiek atkārtoti interpretēts par cita veida datu rādītāju, izmantojot reinterpret_cast:

#include
izmantojot nosaukumvieta std ;

starpt galvenais ( )
{
starpt * q = jauns starpt ( 70 ) ;
char * ch = reinterpret_cast ( q ) ;
cout << * q << endl ;
cout << * ch << endl ;
cout << q << endl ;
cout << ch << endl ;
atgriezties 0 ;
}

Sākotnēji tiek piešķirts vesels skaitlis ar vērtību 70. Rādītājs q norāda uz šo dinamiski piešķirto veselo skaitli. Reinterpret_cast tiek izmantots, lai atkārtoti interpretētu rādītāju q kā rakstzīmju rādītāju ch, kas nozīmē, ka atmiņa, kas sākotnēji piešķirta q, tagad tiek apstrādāta tā, it kā tā būtu rakstzīme. Izmantojot komandu cout, tā izdrukā q un ch piešķirto vērtību. Tā kā ch tiek uzskatīts par rakstzīmju rādītāju, tas atgriezīs rakstzīmes vērtību.

Tas izdrukā vērtību, kas norādīta uz ch, izmantojot *ch. Tomēr, tā kā ch tiek uzskatīts par rakstzīmju rādītāju, šī rinda interpretēs atmiņu kā rakstzīmi. Tas izdrukā atmiņas adresi, kas saglabāta rādītājā ch, izmantojot ch. Šī ir tāda pati atmiņas adrese kā q, jo tā ir tikai vienas un tās pašas atmiņas atkārtota interpretācija.

Sākotnēji vesels skaitlis saglabā 70. Vēlāk tas tiek manipulēts starp rādītāju q un rādītāju ch. 2. un 4. izvadi ir vienādi, jo otrā vērtība tiek interpretēta atkārtoti, izmantojot reinterpret_cast.

Piezīme : nav ieteicams izmantot šo cast operatoru, kamēr tas nav ļoti nepieciešams, jo tas padara objektu par nepārnēsājamu produktu.

Secinājums

Viena mainīgā datu veida maiņas process citā C++ valodā ir pazīstams kā tipa konvertēšana vai tipa liešana. Tas tiek darīts, lai veiktu matemātiskas darbības ar dažādu datu tipu mainīgajiem lielumiem, padarot to datu tipus savstarpēji saderīgus. Tipa konvertēšana optimizē kodu. Programmā C++ ir netieši un tiešie tipa pārveidojumi. Netiešo tipa pārveidošanu veic pats kompilators, izmantojot iepriekš noteiktu noteikumu kopu, savukārt tiešo tipa konvertēšanu veic programmētājs, izmantojot piešķiršanas operatorus un cast operatorus.