Ez a rész a változók típus-öntését tárgyalja a C++ programozási nyelvben. A típusöntés egy programban az egyik adattípus másikká konvertálására utal. A Typecasting kétféleképpen történhet: automatikusan a fordító által és manuálisan a programozó vagy felhasználó által. A Type Casting más néven típuskonverzió.
Tegyük fel például, hogy az adott adat egész típusú, és lebegő típusra szeretnénk konvertálni. Tehát manuálisan kell átöntnünk az int adatokat a float típusba, és ezt a fajta öntést C++-ban Type Castingnak hívják.
int num = 5; float x; x = float(num); x = 5.0
2ndpélda:
float num = 5.25; int x; x = int(num); Output: 5
A Type Casting két típusra oszlik: implicit konverzióra vagy implicit típuscastingra és explicit típuskonverzióra vagy explicit típusú öntésre.
Implicit Type Casting vagy Implicit Type Conversion
- Automatikus típusú öntés néven ismert.
- Automatikusan konvertált egyik adattípusról a másikra külső beavatkozás, például programozó vagy felhasználó nélkül. Ez azt jelenti, hogy a fordító automatikusan konvertálja az egyik adattípust egy másikra.
- Minden adattípus automatikusan frissül a legnagyobb típusra, információvesztés nélkül.
- Csak akkor alkalmazható egy programban, ha mindkét változó kompatibilis egymással.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Megjegyzés: Az Implicit Type Castingot alacsonytól a magasabb adattípusig kell elvégezni. Ellenkező esetben ez befolyásolja az alapvető adattípust, amely elveszítheti a pontosságot vagy az adatokat, és a fordító figyelmeztetést jeleníthet meg.
Program az implicit típusú öntvény használatához C++ nyelven
java részstring metódus
Hozzunk létre egy példát, amely bemutatja az egyik változó egy másikba öntését a C++ implicit típusú öntésével.
#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; }
Kimenet:
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
A fenti programban deklaráltunk egy rövid adattípusú x változót 200 és egy egész változót y. Ezt követően x értéket rendelünk az y-hoz, majd a fordító automatikusan konvertálja az x rövid adatértéket y-re, ami y 200-at ad vissza.
A következő kifejezésekben deklaráltuk, hogy egy int típusú, num változó 20, a ch karakter típusú változó pedig 'a', ami egy 97-es egész értéknek felel meg. Ezután hozzáadjuk ezt a két változót az implicit konverzió végrehajtásához, amely visszaadja a kifejezés eredményét: 117.
Hasonlóképpen, a harmadik kifejezésben hozzáadjuk a num egész szám változót 20, a ch karakterváltozót pedig 65, majd az eredményt hozzárendeljük a val lebegő változóhoz. Így a kifejezés eredményét a fordító automatikusan float típusúvá konvertálja.
Explicit Type Casting vagy Explicit Type Conversion
- Más néven kézi típusú öntés programban.
- A programozó vagy a felhasználó manuálisan adja át az egyik adattípusról a másikra a programban. Ez azt jelenti, hogy a felhasználó könnyedén átküldheti az egyik adatot a másikra a program követelményei szerint.
- Nem szükséges ellenőrizni a változók kompatibilitását.
- Ebben az castingban egy programban frissíthetjük vagy visszaminősíthetjük az egyik változó adattípusát egy másikra.
- A cast () operátort használja a változó típusának megváltoztatására.
Az explicit típusú öntvény szintaxisa
(type) expression;
típus: A felhasználó által definiált adatokat képviseli, amelyek átalakítják az adott kifejezést.
ascii tábla java
kifejezés: Azt a konstans értéket, változót vagy kifejezést jelöli, amelynek adattípusa konvertálva van.
Például van egy lebegő mutatószámunk 4,534, és egy egész szám konvertálásához az alábbi utasítást kell megadni:
int num; num = (int) 4.534; // cast into int data type cout << num;
A fenti utasítások végrehajtásakor a lebegőpontos érték egész adattípusba kerül a cast () operátor használatával. A lebegőérték pedig egy egész számhoz van rendelve, amely csonkolja a decimális részt, és csak 4-et jelenít meg egész értékként.
Program, amely bemutatja az explicit típusú öntvény használatát C++ nyelven
Hozzunk létre egy egyszerű programot, amellyel az egyik típusú változót egy másik típusba önthetjük a C++ programozási nyelv explicit típusú öntésével.
#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; }
Kimenet:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
A fenti programban két egész változót veszünk, a és b, amelyek értéke 21 és 2. Ezután osztjuk el a-t b-vel (21/2), ami 4 int típusú értéket ad vissza.
A második kifejezésben egy lebegő típusú res változót deklarálunk, amely az explicit típusú cast metódusban a cast operátor használatával adatvesztés nélkül tárolja a és b eredményeit.
Program dupla adatok int és float típusba öntésére a cast operátor segítségével
Tekintsünk egy példát a téglalap területének kiszámítására úgy, hogy dupla adatokat öntünk float és int típusba C++ programozásban.
#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; }
Kimenet:
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
A Type Casting néhány különböző típusa
A type castnál van egy cast operátor, amely egy adattípust egy másik adattípussá alakít át a program igényei szerint. A C++-nak négy különböző típusú cast operátora van:
- Static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
Statikus szereposztás:
junit tesztesetek
A static_cast egy egyszerű fordítási idő, amely átalakítja vagy átküldi az egyik adattípust egy másikra. Ez azt jelenti, hogy nem ellenőrzi az adattípust futás közben, hogy az elvégzett öntvény érvényes-e vagy sem. Így a programozó vagy a felhasználó felelős azért, hogy az átalakítás biztonságos és érvényes legyen.
A static_cast eléggé képes arra, hogy végrehajtsa az implicit cast által végrehajtott összes konverziót. És elvégzi az egymáshoz kapcsolódó osztályok mutatói közötti konverziókat is (upcast - > származtatott osztályból alaposztályba vagy downcast - > alapból származtatott osztályba).
A statikus szereposztás szintaxisa
static_cast (expression);
Program a Static Cast használatának bemutatására
Hozzunk létre egy egyszerű példát a típusú öntés statikus öntésének használatára a C++ programozásban.
#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; }
Kimenet:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Dinamikus Cast
A dynamic_cast egy futásidejű cast operátor, amellyel az egyik típusú változót egy másikra konvertálják csak osztálymutatókon és hivatkozásokon. Ez azt jelenti, hogy futási időben ellenőrzi a változók érvényes öntését, és ha az öntés sikertelen, akkor NULL értéket ad vissza. A dinamikus öntés az RTTI (Runtime Type Identification) mechanizmuson alapul.
Program, amely bemutatja a Dynamic Cast használatát C++ nyelven
Készítsünk egy egyszerű programot a dynamic_cast végrehajtására C++ programozási nyelven.
#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'; } }
Kimenet:
Dynamic casting is done successfully.
A Cast Type újraértelmezése
A reinterpret_cast típusú casting arra szolgál, hogy bármely más típusú mutatóra mutatót öntsön, függetlenül attól, hogy az adott mutató egymáshoz tartozik-e vagy sem. Ez azt jelenti, hogy nem ellenőrzi, hogy a mutató vagy a mutató által mutatott adat megegyezik-e vagy sem. És mutatót is dobott egy egész típusra, vagy fordítva.
A reinterpret_cast típusú szintaxis
reinterpret_cast expression;
Program a Reinterpret Cast használatához C++ nyelven
Írjunk egy programot, amely bemutatja a mutató konvertálását a C++ nyelvi újraértelmezés segítségével.
#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; }
Kimenet:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Szereplők
A const_cast a forrásmutató const viselkedésének megváltoztatására vagy manipulálására szolgál. Ez azt jelenti, hogy a const kétféleképpen hajthatjuk végre: a const mutatót nem const mutatóra állítva, vagy a const törlését vagy eltávolítását a const mutatóból.
operációs rendszer
A Const Cast típus szintaxisa
const_cast exp;
Program a Const Cast használatához C++ nyelven
Írjunk egy programot, amely egy forrásmutatót nem öntött mutatóra önt a const_cast segítségével C++-ban.
#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; }
Kimenet:
The value of ptr cast: 500