logo

Įveskite Casting C++

Šiame skyriuje bus aptariamas kintamųjų tipas liejimas C++ programavimo kalba. Tipo liejimas reiškia vieno duomenų tipo konvertavimą į kitą programoje. Tipų siuntimas gali būti atliekamas dviem būdais: automatiškai kompiliatoriaus ir rankiniu būdu programuotojo ar vartotojo. Tipo perdavimas taip pat žinomas kaip tipo konvertavimas.

Įveskite Casting C++

Pavyzdžiui, tarkime, kad pateikti duomenys yra sveikojo skaičiaus tipo ir norime juos konvertuoti į plūduriuojančius duomenis. Taigi, mes turime rankiniu būdu perduoti int duomenis į float tipą, o šis liejimo tipas vadinamas Type Casting C++ kalboje.

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

2ndpavyzdys:

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

Tipo perdavimas skirstomas į du tipus: numanomas konvertavimas arba numanomas tipo perdavimas ir aiškus tipo konvertavimas arba aiškus tipo perdavimas.

Implicit Type Casting arba Implicit Type Conversion

  • Jis žinomas kaip automatinio tipo liejimas.
  • Jis automatiškai konvertuojamas iš vieno duomenų tipo į kitą be jokio išorinio įsikišimo, pvz., programuotojo ar vartotojo. Tai reiškia, kad kompiliatorius automatiškai konvertuoja vieną duomenų tipą į kitą.
  • Visi duomenų tipai automatiškai atnaujinami į didžiausią tipą, neprarandant jokios informacijos.
  • Jis gali būti taikomas tik programoje, jei abu kintamieji yra suderinami vienas su kitu.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

Pastaba: implicit Type Casting turėtų būti atliekamas nuo žemo iki aukštesnio tipo duomenų. Priešingu atveju tai paveiks pagrindinį duomenų tipą, kuris gali prarasti tikslumą arba duomenis, o kompiliatorius gali įspėti apie tai.

Programa, skirta naudoti implicitinio tipo liejimą C++

Sukurkime pavyzdį, kad parodytume vieno kintamojo perkėlimą į kitą, naudojant numanomo tipo liejimą 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; } 

Išvestis:

 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 

Aukščiau pateiktoje programoje paskelbėme, kad trumpo duomenų tipo kintamasis x yra 200 ir sveikasis skaičius y. Po to y priskiriame x reikšmę, o tada kompiliatorius automatiškai konvertuoja trumpų duomenų reikšmę x į y, o tai grąžina y yra 200.

Kitose išraiškose paskelbėme, kad int tipo kintamasis num yra 20, o simbolio tipo kintamasis ch yra „a“, o tai atitinka sveikojo skaičiaus reikšmę 97. Tada pridedame šiuos du kintamuosius, kad atliktume numanomą konvertavimą, kuris grąžina išraiškos rezultatą 117.

logotipas java

Panašiai trečioje išraiškoje pridedame sveikąjį kintamąjį num yra 20, o simbolio kintamąjį ch yra 65, o tada priskiriame rezultatą kintamajam val. Taigi kompiliatorius automatiškai konvertuoja išraiškos rezultatą į float tipą.

Aiškaus tipo perdavimas arba aiškaus tipo konvertavimas

  • Jis taip pat žinomas kaip rankinio tipo liejimas programoje.
  • Programuotojas arba vartotojas juos rankiniu būdu perduoda, kad programoje pakeistų vieną duomenų tipą į kitą. Tai reiškia, kad vartotojas gali lengvai perduoti vienus duomenis į kitus pagal programos reikalavimus.
  • Tam nereikia tikrinti kintamųjų suderinamumo.
  • Atliekant šį liejimą, programoje galime atnaujinti arba sumažinti vieno kintamojo duomenų tipą į kitą.
  • Jis naudoja cast () operatorių, kad pakeistų kintamojo tipą.

Aiškaus tipo liejimo sintaksė

 (type) expression; 

tipas: Tai reiškia vartotojo apibrėžtus duomenis, kurie konvertuoja pateiktą išraišką.

išraiška: Tai yra pastovi reikšmė, kintamasis arba išraiška, kurios duomenų tipas konvertuojamas.

Pavyzdžiui, slankusis skaičius yra 4,534, o norint konvertuoti sveikojo skaičiaus reikšmę, teiginys yra toks:

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

Kai pirmiau pateikti teiginiai bus vykdomi, slankaus kablelio reikšmė bus perduota į sveikųjų skaičių duomenų tipą, naudojant cast () operatorių. Slankioji reikšmė priskiriama sveikajam skaičiui, kuris sutrumpina dešimtainę dalį ir rodo tik 4 kaip sveikąjį skaičių.

Programa, skirta parodyti, kaip naudojamas aiškaus tipo liejimas C++

objekto konvertavimas į eilutę

Sukurkime paprastą programą, skirtą vieno tipo kintamiesiems perkelti į kitą tipą, naudodami aiškų tipo liejimą C++ programavimo kalba.

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

Išvestis:

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

Aukščiau pateiktoje programoje paimame du sveikuosius kintamuosius a ir b, kurių reikšmės yra 21 ir 2. Tada padalykite a iš b (21/2), kuris grąžina 4 int tipo reikšmę.

Antroje išraiškoje deklaruojame slankiojo tipo kintamąjį res, kuris saugo a ir b rezultatus neprarandant jokių duomenų, naudojant cast operatorių aiškaus tipo perdavimo metodu.

Programa perkelti dvigubus duomenis į int ir float tipus naudojant cast operatorių

Panagrinėkime pavyzdį, kaip gauti stačiakampio plotą, perkeliant dvigubus duomenis į float ir int tipą programuojant C++.

java eilutė į loginę
 #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; } 

Išvestis:

 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 

Kai kurie skirtingi tipo liejimo tipai

Tipo cast yra cast operatorius, kuris priverčia vieną duomenų tipą konvertuoti į kitą duomenų tipą pagal programos poreikius. C++ turi keturis skirtingus perdavimo operatorių tipus:

  1. Statinis_perdavimas
  2. dinaminis_perdavimas
  3. const_cast
  4. reinterpret_cast

Statinis aktorius:

Static_cast yra paprastas kompiliavimo laiko perdavimas, kuris konvertuoja arba perduoda vieną duomenų tipą į kitą. Tai reiškia, kad vykdymo metu netikrina duomenų tipo, ar atliktas perdavimas yra tinkamas, ar ne. Taigi programuotojas arba vartotojas turi užtikrinti, kad konvertavimas būtų saugus ir galiojantis.

Static_cast yra pakankamai pajėgus, kad galėtų atlikti visas numanomo perdavimo atliekamas konversijas. Be to, ji atlieka konvertavimą tarp klasių, susijusių viena su kita, rodyklių (upcast -> iš išvestinės į bazinę klasę arba downcast -> iš bazinės į išvestinę klasę).

Statinio perdavimo sintaksė

 static_cast (expression); 

Programa, skirta demonstruoti Static Cast naudojimą

Sukurkime paprastą pavyzdį, kaip naudoti C++ tipo liejimo statinį atkūrimą.

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

Išvestis:

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

Dinaminis perdavimas

Dynamic_cast yra vykdymo laiko perdavimo operatorius, naudojamas vieno tipo kintamiesiems konvertuoti į kitą tik klasės rodyklėmis ir nuorodomis. Tai reiškia, kad jis patikrina tinkamą kintamųjų perdavimą vykdymo metu, o jei perdavimas nepavyksta, grąžinama NULL reikšmė. Dinaminis perdavimas pagrįstas RTTI (Runtime Type Identification) mechanizmu.

Programa, skirta demonstruoti „Dynamic Cast“ naudojimą C++

Sukurkime paprastą programą, kuri atliktų dynamic_cast C++ programavimo kalba.

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

Išvestis:

 Dynamic casting is done successfully. 

Iš naujo interpretuokite perdavimo tipą

Reinterpret_cast tipo liejimas naudojamas nukreipti žymeklį į bet kurio kito tipo rodyklę, nesvarbu, ar nurodytas rodyklė priklauso vienas kitam, ar ne. Tai reiškia, kad netikrina, ar žymeklis arba žymeklio nurodyti duomenys yra tokie patys, ar ne. Be to, jis nukreipia žymeklį į sveikojo skaičiaus tipą arba atvirkščiai.

Reinterpret_cast tipo sintaksė

 reinterpret_cast expression; 

Programa, skirta naudoti Reinterpret Cast C++

Parašykime programą, kuri parodys rodyklės konvertavimą naudojant reinterpretą C++ kalba.

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

Išvestis:

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

Const Vaid

eilė ir prioritetinė eilė Java

Const_cast naudojamas šaltinio žymeklio const elgesiui pakeisti arba manipuliuoti. Tai reiškia, kad galime atlikti const dviem būdais: nustatyti const žymiklį į ne const rodyklę arba ištrinti arba pašalinti const iš const rodyklės.

„Const Cast“ tipo sintaksė

 const_cast exp; 

Programa, skirta naudoti Const Cast C++

Parašykime programą, skirtą perduoti šaltinio žymeklį į neperduotą rodyklę, naudodami 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; } 

Išvestis:

 The value of ptr cast: 500