logo

Tastați Casting în C++

Această secțiune va discuta despre tipul de turnare a variabilelor în limbajul de programare C++. Turnarea tipului se referă la conversia unui tip de date la altul într-un program. Typecastingul se poate face în două moduri: automat de către compilator și manual de către programator sau utilizator. Tipul de turnare este cunoscut și sub numele de conversie de tip.

Tastați Casting în C++

De exemplu, să presupunem că datele date sunt de tip întreg și dorim să le convertim în tip float. Deci, trebuie să turnăm manual datele int la tipul float, iar acest tip de casting se numește Type Casting în C++.

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

2ndexemplu:

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

Casting de tip este împărțit în două tipuri: Conversie implicită sau Casting de tip implicit și Conversie de tip explicit sau Casting de tip explicit.

Casting implicit tip sau conversie implicit tip

  • Este cunoscut sub numele de turnare de tip automat.
  • S-a convertit automat de la un tip de date la altul fără nicio intervenție externă, cum ar fi programatorul sau utilizatorul. Înseamnă că compilatorul convertește automat un tip de date în altul.
  • Toate tipurile de date sunt actualizate automat la cel mai mare tip, fără a pierde nicio informație.
  • Se poate aplica într-un program numai dacă ambele variabile sunt compatibile între ele.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

Notă: Castingul tip implicit ar trebui să se facă de la tipurile de date mai mici la cele mai mari. În caz contrar, afectează tipul fundamental de date, care poate pierde precizia sau datele, iar compilatorul poate afișa un avertisment în acest sens.

Program pentru a utiliza tipul implicit de turnare în C++

Să creăm un exemplu pentru a demonstra transformarea unei variabile la alta folosind castingul tip implicit în 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; } 

Ieșire:

 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 

În programul de mai sus, am declarat o variabilă scurtă de tip de date x este 200 și o variabilă întreagă y. După aceea, atribuim valoarea x lui y, iar apoi compilatorul convertește automat valoarea scurtă a datelor x în y, care returnează y este 200.

În expresiile următoare, am declarat că o variabilă de tip int num este 20, iar variabila de tip caracter ch este „a”, ceea ce este echivalent cu o valoare întreagă de 97. Apoi, adăugăm aceste două variabile pentru a efectua conversia implicită, care returnează rezultatul expresiei este 117.

În mod similar, în cea de-a treia expresie, adăugăm variabila întreagă num este 20 și variabila caracter ch este 65 și apoi atribuim rezultatul variabilei float val. Astfel, rezultatul expresiei este convertit automat la tipul float de către compilator.

Casting explicit tip sau conversie explicit tip

sortare de inserare
  • Este, de asemenea, cunoscut sub numele de turnare de tip manual într-un program.
  • Este transmis manual de către programator sau utilizator pentru a schimba de la un tip de date la altul într-un program. Înseamnă că un utilizator poate arunca cu ușurință o dată la alta în funcție de cerințele unui program.
  • Nu necesită verificarea compatibilității variabilelor.
  • În acest casting, putem face upgrade sau downgrade tipul de date al unei variabile la alta într-un program.
  • Utilizează operatorul cast () pentru a schimba tipul unei variabile.

Sintaxa tipului explicit de turnare

 (type) expression; 

tip: Reprezintă datele definite de utilizator care convertesc expresia dată.

expresie: Reprezintă valoarea constantă, variabila sau o expresie al cărei tip de date este convertit.

De exemplu, avem un număr flotant este 4,534, iar pentru a converti o valoare întreagă, declarația ca:

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

Când instrucțiunile de mai sus sunt executate, valoarea în virgulă mobilă va fi transformată într-un tip de date întreg folosind operatorul cast (). Și valoarea float este atribuită unui număr întreg care trunchiază porțiunea zecimală și afișează doar 4 ca valoare întreagă.

Program pentru a demonstra utilizarea modelului explicit de tip casting în C++

Să creăm un program simplu pentru a turna o variabilă de tip într-un alt tip folosind castingul explicit de tip în limbajul de programare 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; } 

Ieșire:

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

În programul de mai sus, luăm două variabile întregi, a și b, ale căror valori sunt 21 și 2. Și apoi, împărțim a la b (21/2) care returnează o valoare de tip 4 int.

În a doua expresie, declarăm o variabilă de tip float res care stochează rezultatele a și b fără a pierde date folosind operatorul cast în metoda explicit tip cast.

Program pentru a arunca date duble în tip int și float utilizând operatorul cast

Să luăm în considerare un exemplu pentru a obține aria dreptunghiului prin turnarea datelor duble în tipul float și int în programarea C++.

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

Ieșire:

 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 

Câteva tipuri diferite de tip Casting

În tipul cast, există un operator de turnare care forțează ca un tip de date să fie convertit într-un alt tip de date în funcție de nevoile programului. C++ are patru tipuri diferite de operator de distribuție:

  1. Static_cast
  2. dynamic_cast
  3. const_cast
  4. reinterpret_cast

Distribuție statică:

static_cast este o distribuție simplă în timp de compilare care convertește sau aruncă un tip de date la altul. Înseamnă că nu verifică tipul de date în timpul execuției dacă castarea efectuată este validă sau nu. Astfel, programatorul sau utilizatorul are responsabilitatea de a se asigura că conversia a fost sigură și validă.

static_cast este suficient de capabil pentru a putea efectua toate conversiile efectuate de castul implicit. Și, de asemenea, efectuează conversiile între pointerii claselor legate între ele (upcast -> de la derivată la clasa de bază sau downcast -> de la bază la clasa derivată).

Sintaxa castului static

 static_cast (expression); 

Program pentru demonstrarea utilizării Static Cast

Să creăm un exemplu simplu pentru a folosi castingul static al tipului casting în programarea C++.

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

Ieșire:

înlocuiți șirul în șirul de caractere java
 Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39 

Distribuție dinamică

dynamic_cast este un operator de difuzare în timp de execuție utilizat pentru a efectua conversia unei variabile de tip în alta numai pe pointerii și referințele de clasă. Înseamnă că verifică turnarea validă a variabilelor în timpul rulării, iar dacă castingul eșuează, returnează o valoare NULL. Turnarea dinamică se bazează pe mecanismul RTTI (Runtime Type Identification).

Program pentru a demonstra utilizarea Dynamic Cast în C++

Să creăm un program simplu pentru a efectua dynamic_cast în limbajul de programare 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'; } } 

Ieșire:

 Dynamic casting is done successfully. 

Reinterpretați tipul de distribuție

Castingul de tip reinterpret_cast este folosit pentru a arunca un pointer către orice alt tip de pointer, indiferent dacă indicatorul dat aparține unul altuia sau nu. Înseamnă că nu verifică dacă pointerul sau datele către care indică indicatorul sunt sau nu aceleași. Și a aruncat, de asemenea, un indicator către un tip întreg sau invers.

Sintaxa tipului reinterpret_cast

 reinterpret_cast expression; 

Program pentru a utiliza Reinterpret Cast în C++

Să scriem un program pentru a demonstra conversia unui pointer folosind reinterpretarea în limbajul C++.

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

Ieșire:

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

Const Cast

Const_cast este folosit pentru a modifica sau manipula comportamentul const al pointerului sursă. Înseamnă că putem efectua const în două moduri: setarea unui pointer const la un pointer non-const sau ștergerea sau eliminarea const dintr-un pointer const.

Sintaxa tipului Const Cast

 const_cast exp; 

Program pentru a utiliza Const Cast în C++

Să scriem un program pentru a arunca un pointer sursă către un pointer non-cast folosind const_cast în 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; } 

Ieșire:

 The value of ptr cast: 500