logo

Ierakstiet Casting programmā C++

Šajā sadaļā tiks apspriesta mainīgo veidu liešana C++ programmēšanas valodā. Tipa apraide attiecas uz viena datu veida konvertēšanu uz citu programmā. Typecasting var veikt divos veidos: automātiski, ko veic kompilators, un manuāli, ko veic programmētājs vai lietotājs. Tipa apraide ir pazīstama arī kā tipa konvertēšana.

Ierakstiet Casting programmā C++

Piemēram, pieņemsim, ka norādītie dati ir vesela skaitļa tips, un mēs vēlamies tos pārvērst peldošā veidā. Tātad mums ir manuāli jāpārraida int dati uz pludiņa veidu, un šāda veida liešanu C++ valodā sauc par Type Casting.

 int num = 5; float x; x = float(num); x = 5.0 

2ndpiemērs:

 float num = 5.25; int x; x = int(num); Output: 5 

Tipa apraide ir sadalīta divos veidos: netiešā pārveide vai netiešā tipa apraide un tiešā tipa pārveide vai tieša tipa apraide.

Implicit Type Casting vai Implicit Type Conversion

  • Tas ir pazīstams kā automātiskā tipa liešana.
  • Tas tiek automātiski pārveidots no viena datu veida uz citu bez jebkādas ārējas iejaukšanās, piemēram, programmētāja vai lietotāja. Tas nozīmē, ka kompilators automātiski pārvērš vienu datu tipu citā.
  • Visi datu tipi tiek automātiski jaunināti uz lielāko veidu, nezaudējot nekādu informāciju.
  • Programmā to var lietot tikai tad, ja abi mainīgie ir savietojami viens ar otru.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

Piezīme. Netiešā tipa apraide jāveic no zemiem uz augstākiem datu tipiem. Pretējā gadījumā tas ietekmē pamata datu tipu, kas var zaudēt precizitāti vai datus, un kompilators var parādīt brīdinājumu par to.

Programma implicītā tipa liešanai C++ valodā

Izveidosim piemēru, lai demonstrētu viena mainīgā apliešanu ar citu, izmantojot netiešo tipa liešanu C++ valodā.

 #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; } 

Izvade:

 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 

Iepriekš minētajā programmā mēs deklarējām īsu datu tipa mainīgo x ir 200 un veselu skaitļu mainīgo y. Pēc tam mēs piešķiram x vērtību y, un pēc tam kompilators automātiski pārvērš īso datu vērtību x par y, kas atgriež y ir 200.

cik nedēļu ir mēnesī

Nākamajās izteiksmēs mēs paziņojām, ka int tipa mainīgais num ir 20, un rakstzīmju tipa mainīgais ch ir 'a', kas ir līdzvērtīgs vesela skaitļa vērtībai 97. Un pēc tam mēs pievienojam šos divus mainīgos, lai veiktu netiešo konvertēšanu, kas atgriež izteiksmes rezultātu 117.

Līdzīgi, trešajā izteiksmē mēs pievienojam veselu skaitļu mainīgo num ir 20 un rakstzīmju mainīgo ch ir 65, un pēc tam piešķiram rezultātu peldošajam mainīgajam val. Tādējādi kompilators izteiksmes rezultātu automātiski pārvērš peldošā veidā.

Skaidra tipa apraide vai nepārprotama veida konvertēšana

  • Programmā to sauc arī par manuālu liešanu.
  • Programmētājs vai lietotājs to manuāli nodod, lai programmā mainītu no viena datu veida uz citu. Tas nozīmē, ka lietotājs var viegli pārsūtīt vienus datus citam atbilstoši programmas prasībām.
  • Tam nav jāpārbauda mainīgo lielumu saderība.
  • Šajā casting programmā mēs varam jaunināt vai pazemināt viena mainīgā datu tipu uz citu.
  • Tas izmanto cast () operatoru, lai mainītu mainīgā veidu.

Skaidra veida liešanas sintakse

 (type) expression; 

veids: Tas attēlo lietotāja definētus datus, kas pārvērš doto izteiksmi.

izteiksme: Tas apzīmē nemainīgu vērtību, mainīgo vai izteiksmi, kuras datu tips tiek pārveidots.

Piemēram, peldošais rādītājs ir 4,534, un, lai pārvērstu vesela skaitļa vērtību, paziņojums ir šāds:

 int num; num = (int) 4.534; // cast into int data type cout << num; 

Kad iepriekš minētie paziņojumi tiek izpildīti, peldošā komata vērtība tiks nodota vesela skaitļa datu tipam, izmantojot operatoru cast (). Un peldošā vērtība tiek piešķirta veselam skaitlim, kas saīsina decimāldaļu un parāda tikai 4 kā veselu skaitļa vērtību.

Programma, kas demonstrē skaidra tipa liešanas izmantošanu C++ valodā

Izveidosim vienkāršu programmu, lai viena tipa mainīgo pārvērstu citā tipā, izmantojot precīzo tipa apraidi C++ programmēšanas valodā.

 #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; } 

Izvade:

 Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2 

Iepriekš minētajā programmā mēs ņemam divus veselus mainīgos lielumus a un b, kuru vērtības ir 21 un 2. Pēc tam sadaliet a ar b (21/2), kas atgriež 4 int tipa vērtību.

Otrajā izteiksmē mēs deklarējam peldošā tipa mainīgo res, kas saglabā a un b rezultātus, nezaudējot datus, izmantojot cast operatoru skaidrā tipa apraides metodē.

Programma dubultu datu pārsūtīšanai int un float veidā, izmantojot cast operatoru

Apskatīsim piemēru, kā iegūt taisnstūra laukumu, C++ programmējot dubultos datus pludiņa un int tipa formātā.

 #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; } 

Izvade:

 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 

Daži dažādi tipa liešanas veidi

Type cast ir cast operators, kas piespiež vienu datu tipu pārveidot par citu datu tipu atbilstoši programmas vajadzībām. C++ ir četri dažādi apraides operatora veidi:

  1. Static_cast
  2. dinamiskā_apraide
  3. const_cast
  4. reinterpret_cast

Statiskā apraide:

Static_cast ir vienkārša kompilēšanas laika apraide, kas pārvērš vai apraida vienu datu tipu citā. Tas nozīmē, ka izpildlaikā netiek pārbaudīts datu tips, vai veiktā apraide ir derīga. Tādējādi programmētājs vai lietotājs ir atbildīgs par to, lai pārveidošana būtu droša un derīga.

Static_cast ir pietiekami spējīgs, lai veiktu visas konvertēšanas, ko veic netiešā apraide. Un tas arī veic pārveidojumus starp klašu rādītājiem, kas saistīti viens ar otru (upcast -> no atvasinātās uz bāzes klasi vai downcast -> no bāzes uz atvasinātu klasi).

Statiskās apraides sintakse

 static_cast (expression); 

Programma, lai demonstrētu statiskās apraides izmantošanu

Izveidosim vienkāršu piemēru, lai izmantotu tipa liešanas statisko apraidi C++ programmēšanā.

 #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; } 

Izvade:

 Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39 

Dinamiskā apraide

Dynamic_cast ir izpildlaika apraides operators, ko izmanto, lai veiktu viena veida mainīgā konvertēšanu uz citu tikai klases norādes un atsauces. Tas nozīmē, ka tā izpildes laikā pārbauda derīgo mainīgo apraidi, un, ja apraide neizdodas, tā atgriež NULL vērtību. Dinamiskā apraide ir balstīta uz RTTI (Runtime Type Identification) mehānismu.

Programma, lai demonstrētu Dynamic Cast izmantošanu C++

Izveidosim vienkāršu programmu, lai veiktu dynamic_cast C++ programmēšanas valodā.

 #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'; } } 

Izvade:

 Dynamic casting is done successfully. 

Atkārtoti interpretēt apraides veidu

Reinterpret_cast tipa apraide tiek izmantota, lai rādītu jebkura cita veida rādītājam neatkarīgi no tā, vai norādītais rādītājs pieder viens otram vai nē. Tas nozīmē, ka tā nepārbauda, ​​vai rādītājs vai rādītāji, uz kuriem norādīts rādītājs, ir vienādi vai nē. Un tas arī raidīja rādītāju uz vesela skaitļa tipu vai otrādi.

Reinterpret_cast tipa sintakse

 reinterpret_cast expression; 

Programma, lai izmantotu Reinterpret Cast C++

Uzrakstīsim programmu, lai demonstrētu rādītāja pārveidošanu, izmantojot reinterpretāciju C++ valodā.

 #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; } 

Izvade:

 The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A 

Const Cast

Const_cast tiek izmantots, lai mainītu vai manipulētu ar avota rādītāja const uzvedību. Tas nozīmē, ka mēs varam veikt const divos veidos: iestatīt const rādītāju uz rādītāju, kas nav const rādītājs, vai dzēst vai noņemt const rādītāju no const rādītāja.

Const Cast tipa sintakse

 const_cast exp; 

Programma Const Cast izmantošanai C++ valodā

Uzrakstīsim programmu avota rādītāja apraidei uz rādītāju, kas nav apraides, izmantojot const_cast 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; } 

Izvade:

 The value of ptr cast: 500