logo

Casting tipa u C++

Ovaj odjeljak će raspravljati o pretvaranju tipa varijabli u programskom jeziku C++. Pretvorba tipa odnosi se na pretvorbu jednog tipa podataka u drugi u programu. Prilagodba tipa može se izvršiti na dva načina: automatski od strane kompajlera i ručno od strane programera ili korisnika. Određivanje tipa također je poznato kao pretvorba tipa.

Casting tipa u C++

Na primjer, pretpostavimo da je dani podatak cjelobrojnog tipa i želimo ga pretvoriti u float tip. Dakle, trebamo ručno pretvoriti int podatke u tip float, a ovaj tip pretvaranja naziva se pretvaranje tipa u C++.

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

2ndprimjer:

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

Prilagođavanje tipa dijeli se na dvije vrste: implicitna konverzija ili implicitno pretvaranje tipa i eksplicitna konverzija tipa ili eksplicitno pretvaranje tipa.

Implicitno pretvaranje tipa ili implicitno pretvaranje tipa

  • Poznato je kao automatsko lijevanje tipa.
  • Automatski se pretvara iz jedne vrste podataka u drugu bez ikakve vanjske intervencije poput programera ili korisnika. To znači da kompajler automatski pretvara jednu vrstu podataka u drugu.
  • Svi tipovi podataka automatski se nadograđuju na najveći tip bez gubitka informacija.
  • Može se primijeniti u programu samo ako su obje varijable međusobno kompatibilne.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

Napomena: Implicitno pretvaranje tipa trebalo bi se izvršiti od nižih prema višim tipovima podataka. U suprotnom, to utječe na osnovni tip podataka, koji može izgubiti preciznost ili podatke, a kompajler bi mogao prikazati upozorenje u tom smislu.

Program za korištenje implicitnog pretvaranja tipa u C++

Kreirajmo primjer za demonstraciju pretvaranja jedne varijable u drugu pomoću implicitnog pretvaranja tipa u 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; } 

Izlaz:

 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 

U gornjem programu deklarirali smo varijablu kratkog tipa podataka x je 200 i cjelobrojnu varijablu y. Nakon toga dodjeljujemo x vrijednost y-u, a zatim kompajler automatski pretvara kratku vrijednost podataka x u y, što vraća y 200.

U sljedećim izrazima deklarirali smo varijablu int tipa num kao 20, a varijablu karakternog tipa ch je 'a', što je ekvivalentno cjelobrojnoj vrijednosti od 97. I zatim, dodajemo ove dvije varijable da izvršimo implicitnu konverziju, koji vraća rezultat izraza je 117.

Slično, u trećem izrazu, dodajemo cjelobrojnu varijablu num je 20, a karakternu varijablu ch je 65, a zatim dodjeljujemo rezultat float varijabli val. Stoga prevoditelj automatski pretvara rezultat izraza u tip float.

Eksplicitno pretvaranje tipa ili eksplicitno pretvaranje tipa

  • Također je poznato kao ručno upisivanje tipa u programu.
  • Ručno ga oblikuje programer ili korisnik za promjenu iz jedne vrste podataka u drugu vrstu u programu. To znači da korisnik može jednostavno pretvoriti jedan podatak u drugi u skladu sa zahtjevima u programu.
  • Ne zahtijeva provjeru kompatibilnosti varijabli.
  • U ovom kastingu možemo nadograditi ili smanjiti tip podataka jedne varijable u drugu u programu.
  • Koristi operator cast () za promjenu tipa varijable.

Sintaksa eksplicitnog pretvaranja tipa

 (type) expression; 

tip: Predstavlja korisnički definirane podatke koji pretvaraju dati izraz.

izraz: Predstavlja konstantnu vrijednost, varijablu ili izraz čiji se tip podataka pretvara.

Na primjer, imamo broj s pomičnim pokazivačem 4,534, a za pretvorbu cjelobrojne vrijednosti, izjava kao:

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

Kada se gornje izjave izvrše, vrijednost s pomičnim zarezom pretvorit će se u cjelobrojni tip podataka pomoću operatora cast (). A float vrijednost se dodjeljuje cijelom broju num koji skraćuje decimalni dio i prikazuje samo 4 kao cjelobrojnu vrijednost.

Program za demonstraciju upotrebe eksplicitnog pretvaranja tipa u C++

Kreirajmo jednostavan program za pretvaranje jedne varijable tipa u drugi tip koristeći eksplicitno pretvaranje tipa u programskom jeziku C++.

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

Izlaz:

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

U gornjem programu uzimamo dvije cjelobrojne varijable, a i b, čije su vrijednosti 21 i 2. Zatim dijelimo a s b (21/2) što vraća vrijednost tipa 4 int.

U drugom izrazu deklariramo varijablu tipa float res koja pohranjuje rezultate a i b bez gubitka podataka korištenjem operatora cast u metodi cast eksplicitnog tipa.

Program za pretvaranje dvostrukih podataka u tip int i float pomoću operatora pretvaranja

Razmotrimo primjer dobivanja površine pravokutnika pretvaranjem dvostrukih podataka u tip float i int u C++ programiranju.

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

Izlaz:

 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 

Neke različite vrste odljeva tipa

Kod pretvaranja tipa postoji operator pretvaranja koji prisiljava jedan tip podataka da se pretvori u drugi tip podataka prema potrebama programa. C++ ima četiri različite vrste cast operatora:

  1. Static_cast
  2. dinamički_cast
  3. const_cast
  4. reinterpret_cast

Statični Cast:

Static_cast je jednostavno pretvaranje tijekom kompilacije koje pretvara ili pretvara jedan tip podataka u drugi. To znači da ne provjerava tip podataka tijekom izvođenja je li izvršeno pretvaranje valjano ili ne. Stoga programer ili korisnik ima odgovornost osigurati da je pretvorba sigurna i valjana.

Static_cast je dovoljno sposoban da može izvesti sve pretvorbe koje provodi implicitni cast. Također izvodi pretvorbe između pokazivača međusobno povezanih klasa (upcast -> iz izvedene u osnovnu klasu ili downcast -> iz baze u izvedenu klasu).

pokušaj uhvatiti javu

Sintaksa statične cast

 static_cast (expression); 

Program za demonstraciju korištenja Static Casta

Stvorimo jednostavan primjer za korištenje statičkog pretvaranja pretvaranja tipa u C++ programiranju.

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

Izlaz:

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

Dynamic Cast

Dynamic_cast je operator cast za vrijeme izvođenja koji se koristi za izvođenje konverzije jedne varijable tipa u drugu samo na pokazivačima klasa i referencama. To znači da provjerava valjano pretvaranje varijabli u vrijeme izvođenja, a ako pretvaranje ne uspije, vraća NULL vrijednost. Dinamičko livenje temelji se na RTTI (Runtime Type Identification) mehanizmu.

Program za demonstraciju upotrebe Dynamic Casta u C++

Kreirajmo jednostavan program za izvođenje dynamic_cast u programskom jeziku 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'; } } 

Izlaz:

 Dynamic casting is done successfully. 

Reinterpretirajte tip glumca

Kastiranje tipa reinterpret_cast koristi se za pretvaranje pokazivača na bilo koji drugi tip pokazivača bez obzira pripada li dati pokazivač jedan drugome ili ne. To znači da ne provjerava jesu li pokazivač ili podaci na koje pokazuje pokazivač isti ili ne. I također baca pokazivač na cjelobrojni tip ili obrnuto.

Sintaksa tipa reinterpret_cast

 reinterpret_cast expression; 

Program za korištenje Reinterpret Cast u C++

Napišimo program za demonstraciju konverzije pokazivača pomoću reinterpretacije u C++ jeziku.

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

Izlaz:

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

Const Cast

Const_cast se koristi za promjenu ili manipuliranje const ponašanjem izvornog pokazivača. To znači da const možemo izvesti na dva načina: postavljanjem const pokazivača na nekonstantni pokazivač ili brisanjem ili uklanjanjem const iz const pokazivača.

Sintaksa tipa Const Cast

 const_cast exp; 

Program za korištenje Const Cast u C++

Napišimo program za pretvaranje izvornog pokazivača na ne-cast pokazivač koristeći const_cast u 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; } 

Izlaz:

 The value of ptr cast: 500