Ako previesť dátové typy v C++

Ako Previest Datove Typy V C



Proces zmeny typu údajov jednej premennej na inú je známy ako konverzia typu alebo pretypovanie v C++. Toto sa vykonáva na vykonávanie matematických operácií s premennými rôznych typov údajov tak, že ich typy údajov sú navzájom kompatibilné. Konverzia typov optimalizuje kód. Napríklad pri výpočte rozdielu medzi dvoma premennými, ak je jedno číslo typu float a druhé typu integer, potom sa typ údajov integer skonvertuje na typ float, aby sa vykonalo odčítanie.

Ako previesť dátové typy v C++

V C++ existujú dva spôsoby, ako zmeniť typy údajov:

Konverzia implicitného typu

Podľa preddefinovaných pravidiel kompilátorom kódu C++ je implicitná konverzia typu typová konverzia vykonaná kompilátorom automaticky bez požiadavky na akýkoľvek externý spúšťač zo strany používateľa. Tento typ konverzie sa zvyčajne uskutočňuje v programe, keď existuje viac ako jeden dátový typ a dátový typ výrazu sa nezhoduje s dátovým typom premennej zahrnutej v tomto výraze.







Aby sa predišlo strate údajov počas konverzie, kompilátor štandardne zmení typ údajov s nízkou presnosťou na typ údajov s vyššou presnosťou. Napríklad skonvertuje celé číslo na pohyblivé číslo namiesto zmeny pohyblivého čísla na celé číslo, aby sa zabránilo strate údajov. Toto sa nazýva propagácia. Nasleduje diagram priorít pre rôzne typy údajov.





Objednávka na konverziu typu

Správne poradie pre konverziu typu je uvedené takto:





bool -- > char -- > krátky int -- > int -- > unsigned int -- > dlhý -- > nepodpísané dlhé -- > dlho dlho -- > plavák -- > dvojitá -- > dlhý dvojitý

Premenná typu s nízkou presnosťou sa skonvertuje na typ údajov s vysokou presnosťou, aby sa zabránilo strate údajov.

Príklad 1

V tomto príklade sa sčítanie vykonáva na premennej rôznych typov údajov pomocou implicitnej typovej konverzie.



#include
použitím menný priestor std ;

int Hlavná ( ) {
int číslo = 100 ;
char charakter = 'C' ;
cout << '100 + 'C' = ' << číslo + charakter << endl ;

plavák val = číslo + 'c' ;
cout << 'float val(100 + 'c') = ' << val << endl ;

int bol = 7890 ;
dlhý nebol = bol ;
cout << 'var_int = ' << nebol ;
vrátiť 0 ;
}

Tu sa pridá celé číslo a znak z tabuľky ASCII a číslo s pohyblivou čiarou a znak „c“. Celé číslo sa uchováva v treťom segmente ako dlhý dátový typ a dátové typy mení samotný kompilátor na základe svojich preddefinovaných pravidiel.

Súčet 100 a ‚C‘ vráti 167, pretože ‚C‘ sa rovná 67 v číslach a 100+‘c‘ vráti 199 ako malé písmená ‚c‘ sa rovná 99. Premenná int je uložená v dlhom dátovom type.

Príklad 2

V tomto príklade sa znak D skonvertuje na float, aby sa vykonala operácia delenia.

#include
použitím menný priestor std ;

int Hlavná ( ) {
char X = 'D' ;

plavák float_var ;

float_var = plavák ( X ) / 'c' ;
// Explicitná konverzia int na float.

cout << 'Hodnota float_var je: ' << float_var << endl ;

vrátiť 0 ;
}

Vstupná hodnota je v tvare znaku D, ktorý je uložený v dátovom type float a ďalej delený znakom C. Tieto znaky sa zmenia na číselné hodnoty a vykoná sa s nimi operácia delenia, ktorá vráti hodnotu v float.

Explicitná konverzia typu

Používateľ musí manuálne zmeniť typ údajov pomocou explicitnej konverzie typu C++, ktorá je často známa ako pretypovanie. Tento typ odlievania sa robí preto, aby sa predišlo implicitnej konverzii typu. Existujú dva spôsoby vykonávania Explicit Type Casting v C++:

  • Konverzia pomocou operátora priradenia
  • Konverzia pomocou operátora Cast

Zadajte konverziu pomocou operátora priradenia v C++

Konverzia typu pomocou operátora priradenia sa vykonáva vynútene, to znamená, že jeden typ údajov sa konvertuje na iný manuálne. To sa dosiahne použitím operátora priradenia „=“, ktorý priradí hodnotu pravého operandu premennej na jej ľavej strane.

Príklad
Tento program vypočíta plochu kruhu pomocou typového odliatku.

#include
#include
použitím menný priestor std ;
int Hlavná ( )
{
int polomer ;
cout <> polomer ;
plavák oblasť = M_PI * polomer * polomer ;
cout << 'Oblasť kruhu s polomerom' << polomer << ' = ' << oblasť ;
}

Operátor priradenia sa používa na priradenie hodnoty float k oblasti, ktorá pozostáva z hodnoty polomeru v dátovom type celé číslo.

Oblasť kruhu je vrátená v dátovom type float, zatiaľ čo polomer je zadaný v dátovom type celé číslo. Dátový typ premennej sa teda zmení pomocou pretypovania pomocou operátora priradenia.

Zadajte konverziu pomocou operátora Cast v C++

Konverzia typu sa vykonáva pomocou operátora cast, ktorý núti jeden dátový typ zmeniť na iný typ podľa potrieb programu.

Existujú štyri rôzne operátory Cast Operator:

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterpret_cast

1: static_cast

static_cast je operátor pretypovania, ktorý sa používa na explicitnú konverziu pohyblivých písmen a znakov na celé čísla atď. Toto je najzákladnejší operátor obsadenia. Dokáže pretypovať dátové typy, ktoré sú svojou povahou podobné. Dokáže konvertovať ukazovatele z jednej formy do druhej, takže ju možno použiť aj na správu pamäte.

Syntax

static_cast ( výraz )

Príklad
Tento program je vytvorený na konverziu dvojitej premennej na dátový typ int pomocou static_cast. Vo výstupe sa odreže akákoľvek desatinná časť.

#include
použitím menný priestor std ;
int Hlavná ( )
{
// deklarovať premennú
dvojitý p ;
p = 2 905 * 1 235 * 24,675 ;
plavák výsledok ;

cout << 'Pred použitím statického prenášania:' << endl ;
cout << 'Hodnota p = ' << p << endl ;

// použite static_cast na konverziu typu údajov
výsledok = static_cast ( p ) ;
cout << ' Po použití statického odliatku: ' << endl ;
cout << 'Hodnota výsledku = ' << výsledok << endl ;

vrátiť 0 ;
}

Na začiatku sa dvojitá premenná p načíta hodnotami, ktoré sa navzájom vynásobia a uložia sa do výsledku. Výsledok obsahuje výsledok pred a za operátorom static_cast:

Pred použitím operátora static_cast sa výsledok zobrazuje v desatinných bodkách, pričom po použití tohto operátora sa zobrazuje v dátovom type celé číslo.

2: const_cast

Operátor const_cast sa používa na konverziu konštantnej hodnoty objektu na nekonštantný typ. Používa sa tam, kde je deklarovaný konštantný objekt a občas potrebujeme zmeniť jeho hodnotu.

Syntax

const_cast ( výraz )

Príklad
V tomto príklade sa operátor const_cast používa na dočasné odstránenie kvalifikátora konštanty a umožňuje vykonávať zmeny v premennej podľa potreby:

#include
použitím menný priestor std ;
int Hlavná ( ) {
konšt int X = 70 ;
konšt int * a = & X ;
cout << 'Stará hodnota je' << * a << ' \n ' ;
int * s = const_cast ( a ) ;
* s = 90 ;
cout << 'Nová hodnota je' << * a ;
vrátiť 0 ;
}

Kvalifikátor konštanty je priradený k premennej int x, čo znamená, že túto premennú nemožno priamo modifikovať. Potom sa na prístup k x používa int *y, čo je ukazovateľ, ale stále sa nedá zmeniť a jeho pôvodná hodnota sa zobrazí pomocou cout. Pomocou operátora const_cast sa vytvorí ukazovateľ z, ktorý je nekonštantný, používa sa na prístup k hodnote x, vďaka čomu je upraviteľný. Zmení hodnotu priradenú k z s 90, čo nepriamo zmení hodnotu v x.

Na začiatku je hodnota konštantnej premennej x 70, ktorá sa upraví použitím operátora const_cast, čím sa stane 90.

3: dynamic_cast

s hierarchiou dedenia, ktorá sa označuje aj ako typovo bezpečný downcast. Down casting je proces konverzie odkazu alebo ukazovateľa na odvodenú triedu z odkazu alebo ukazovateľa základnej triedy.

Syntax

dynamic_cast ( výraz )

Príklad
V tomto príklade sa operátor dynamic_cast používa na kontrolu typu polymorfnej triedy a umožňuje prístup k základným aj odvodeným členom triedy.

#include
#include
použitím menný priestor std ;
trieda TBase
{
verejnosti :
plavák základ_g = 9,81 ;

virtuálne neplatné figurína ( )
{

} ;
} ;

trieda TOdvodené : verejnosti TBase
{
verejnosti :
int local_g = 9,78 ;
} ;

int Hlavná ( )
{

TBase * základňu = Nový TOdvodené ;
TOdvodené * odvodené ;

odvodené = dynamic_cast ( základňu ) ;

cout < základ_g << endl ;
cout < local_g << endl ;

getchar ( ) ;
vrátiť 0 ;
}

Dve triedy sú definované ako základné a odvodené triedy. Základňa ukazovateľov typu TBase* sa vytvorí a priradí dynamicky alokovanému objektu typu TDerived. V tomto prípade polymorfizmu možno k ukazovateľu základnej triedy priradiť objekt odvodenej triedy. Dynamic_cast skontroluje, či ukazovateľ pristupuje k platnému objektu TDerived, ak pretypovanie získa úspešný výsledok, odvodená trieda získa platný výsledok, inak vráti hodnotu null.

4: reinterpret_cast

Reinterpret_cast transformuje ukazovateľ jedného typu údajov na ukazovateľ iného typu údajov. Nekontroluje, či sú dátové typy ukazovateľov rovnaké alebo nie. Tento odlievací operátor je potrebné používať a zaobchádzať s ním opatrne.

Príklad
Na tomto obrázku je ukazovateľ jedného typu údajov reinterpretovaný na ukazovateľ iného typu údajov pomocou reinterpret_cast:

#include
použitím menný priestor std ;

int Hlavná ( )
{
int * q = Nový int ( 70 ) ;
char * ch = reinterpret_cast ( q ) ;
cout << * q << endl ;
cout << * ch << endl ;
cout << q << endl ;
cout << ch << endl ;
vrátiť 0 ;
}

Na začiatku je priradené celé číslo s hodnotou 70. Ukazovateľ q ukazuje na toto dynamicky prideľované celé číslo. Reinterpret_cast sa používa na reinterpretáciu ukazovateľa q ako ukazovateľa znaku ch, čo znamená, že s pamäťou pôvodne priradenou q sa teraz zaobchádza, ako keby to bol znak. Pomocou príkazu cout vypíše hodnotu priradenú q a ch. Keďže ch sa považuje za ukazovateľ na znak, vráti hodnotu znaku.

Vytlačí hodnotu, ktorá ukazuje na ch pomocou *ch. Keďže sa však s ch zaobchádza ako so znakom, tento riadok bude pamäť interpretovať ako znak. Vytlačí pamäťovú adresu uloženú v ukazovateli ch pomocou ch. Toto je rovnaká adresa pamäte ako q, pretože je to len reinterpretácia tej istej pamäte.

Spočiatku celé číslo ukladá 70. Neskôr sa s tým manipuluje medzi ukazovateľom q a ukazovateľom ch. Výstupy 2 a 4 sú rovnaké, pretože druhá hodnota je reinterpretovaná pomocou reinterpret_cast.

Poznámka : Odporúča sa nepoužívať tento operátor vrhania, kým a pokiaľ to nie je veľmi potrebné, pretože to robí z objektu neprenosný produkt

Záver

Proces zmeny typu údajov jednej premennej na inú je známy ako konverzia typu alebo pretypovanie v C++. Toto sa vykonáva na vykonávanie matematických operácií s premennými rôznych typov údajov tak, že ich typy údajov sú navzájom kompatibilné. Konverzia typov optimalizuje kód. V C++ existujú implicitné a explicitné konverzie typov. Konverziu implicitného typu vykonáva samotný kompilátor pomocou vopred definovaného súboru pravidiel, zatiaľ čo explicitnú konverziu typu vykonáva programátor pomocou operátorov priradenia a operátorov pretypovania.