logo

Skriv Casting i C++

Dette afsnit vil diskutere typecasting af variablerne i programmeringssproget C++. Typecasting refererer til konvertering af en datatype til en anden i et program. Typecasting kan udføres på to måder: automatisk af compileren og manuelt af programmøren eller brugeren. Typestøbning er også kendt som Typekonvertering.

Skriv Casting i C++

Antag for eksempel, at de givne data er en heltalstype, og vi ønsker at konvertere den til flydende type. Så vi skal manuelt caste int-data til float-typen, og denne type casting kaldes Type Casting i C++.

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

2ndeksempel:

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

Typestøbning er opdelt i to typer: Implicit konvertering eller Implicit Typecasting og Eksplicit Typekonvertering eller Eksplicit Typecasting.

heltal til streng java

Implicit typecasting eller implicit typekonvertering

  • Det er kendt som den automatiske type støbning.
  • Den konverteres automatisk fra én datatype til en anden uden nogen ekstern indgriben, såsom programmør eller bruger. Det betyder, at compileren automatisk konverterer en datatype til en anden.
  • Alle datatyper opgraderes automatisk til den største type uden at miste nogen information.
  • Det kan kun anvendes i et program, hvis begge variabler er kompatible med hinanden.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

Bemærk: Implicit typecasting bør udføres fra lave til højere datatyper. Ellers påvirker det den grundlæggende datatype, som kan miste præcision eller data, og compileren kan blinke en advarsel om dette.

Program til at bruge den implicitte type casting i C++

Lad os lave et eksempel for at demonstrere støbningen af ​​en variabel til en anden ved at bruge den implicitte type casting i 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; } 

Produktion:

 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 

I ovenstående program erklærede vi en kort datatypevariabel x er 200 og en heltalsvariabel y. Derefter tildeler vi x-værdien til y'et, og derefter konverterer compileren automatisk den korte dataværdi x til y'et, hvilket returnerer y er 200.

I de næste udtryk erklærede vi en int type variabel num er 20, og tegntypevariablen ch er 'a', hvilket svarer til en heltalsværdi på 97. Og så tilføjer vi disse to variable for at udføre den implicitte konvertering, som returnerer resultatet af udtrykket er 117.

Tilsvarende tilføjer vi i det tredje udtryk den heltalsvariable num er 20, og tegnvariablen ch er 65, og tildeler derefter resultatet til den flydende variabel val. Resultatet af udtrykket konverteres således automatisk til float-typen af ​​compileren.

Eksplicit type casting eller eksplicit type konvertering

  • Det er også kendt som den manuelle type casting i et program.
  • Det castes manuelt af programmøren eller brugeren for at skifte fra en datatype til en anden type i et program. Det betyder, at en bruger nemt kan caste en data til en anden i henhold til kravet i et program.
  • Det kræver ikke kontrol af kompatibiliteten af ​​variablerne.
  • I denne casting kan vi opgradere eller nedgradere datatypen for en variabel til en anden i et program.
  • Den bruger cast-operatoren () til at ændre typen af ​​en variabel.

Syntaks af den eksplicitte type casting

 (type) expression; 

type: Det repræsenterer de brugerdefinerede data, der konverterer det givne udtryk.

udtryk: Det repræsenterer konstantværdien, variabelen eller et udtryk, hvis datatype er konverteret.

For eksempel har vi et flydende tal, der peger på 4,534, og for at konvertere en heltalsværdi er sætningen som:

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

Når ovenstående sætninger udføres, vil den flydende kommaværdi blive castet til en heltalsdatatype ved hjælp af cast-operatoren (). Og den flydende værdi er tildelt et heltal, der afkorter decimaldelen og kun viser 4 som heltalsværdien.

Program til at demonstrere brugen af ​​den eksplicitte type casting i C++

Lad os skabe et simpelt program til at caste en typevariabel til en anden type ved at bruge den eksplicitte type casting i C++ programmeringssproget.

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

Produktion:

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

I ovenstående program tager vi to heltalsvariable, a og b, hvis værdier er 21 og 2. Og divider derefter a med b (21/2), der returnerer en 4 int type værdi.

dfs algoritme

I det andet udtryk erklærer vi en float type variabel res, der gemmer resultaterne af a og b uden at miste nogen data ved at bruge cast-operatoren i den eksplicitte type cast-metode.

Program til at caste dobbeltdata til int og float-type ved hjælp af cast-operatoren

Lad os overveje et eksempel for at få arealet af rektanglet ved at støbe dobbelt data ind i float og int type i C++ programmering.

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

Produktion:

 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 

Nogle forskellige typer af Typestøbning

I type cast er der en cast operatør, der tvinger en datatype til at blive konverteret til en anden datatype i henhold til programmets behov. C++ har fire forskellige typer af cast-operatører:

  1. Static_cast
  2. dynamisk_cast
  3. const_cast
  4. genfortolke_cast

Statisk rollebesætning:

Static_cast er et simpelt kompileringstidscast, der konverterer eller caster en datatype til en anden. Det betyder, at den ikke kontrollerer datatypen under kørsel, om den udførte cast er gyldig eller ej. Programmøren eller brugeren har således ansvaret for at sikre, at konverteringen var sikker og gyldig.

Static_cast er i stand til at udføre alle de konverteringer, der udføres af den implicitte cast. Og det udfører også konverteringer mellem pointere af klasser relateret til hinanden (upcast - > fra afledt til basisklasse eller downcast - > fra basis til afledt klasse).

Syntaks for den statiske rollebesætning

 static_cast (expression); 

Program til at demonstrere brugen af ​​Static Cast

Lad os lave et simpelt eksempel for at bruge den statiske cast af typen casting i C++ programmering.

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

Produktion:

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

Dynamisk cast

Dynamic_cast er en runtime-cast-operator, der kun bruges til at udføre konvertering af en typevariabel til en anden på klassepointere og referencer. Det betyder, at den kontrollerer den gyldige casting af variablerne ved kørselstiden, og hvis castingen mislykkes, returnerer den en NULL-værdi. Dynamisk støbning er baseret på RTTI (Runtime Type Identification) mekanisme.

Program til at demonstrere brugen af ​​Dynamic Cast i C++

Lad os skabe et simpelt program til at udføre dynamic_cast i programmeringssproget 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'; } } 

Produktion:

 Dynamic casting is done successfully. 

Genfortolke Cast Type

Reinterpret_cast type casting bruges til at kaste en pointer til enhver anden type pointer, uanset om den givne pointer tilhører hinanden eller ej. Det betyder, at den ikke kontrollerer, om markøren eller de data, som markøren peger på, er de samme eller ej. Og det kaster også en pointer til en heltalstype eller omvendt.

Syntaks af typen reinterpret_cast

 reinterpret_cast expression; 

Program til at bruge genfortolkning af Cast i C++

Lad os skrive et program til at demonstrere konverteringen af ​​en pointer ved hjælp af genfortolkningen i C++ sprog.

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

Produktion:

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

Const Cast

Const_cast bruges til at ændre eller manipulere kildemarkørens const-adfærd. Det betyder, at vi kan udføre const på to måder: sætte en const pointer til en ikke-const pointer eller slette eller fjerne const fra en const pointer.

Syntaks af typen Const Cast

kort vs sæt
 const_cast exp; 

Program til at bruge Const Cast i C++

Lad os skrive et program til at kaste en kildemarkør til en ikke-cast pointer ved hjælp af const_cast i 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; } 

Produktion:

 The value of ptr cast: 500