Táto časť sa bude zaoberať typovým pretypovaním premenných v programovacom jazyku C++. Pretypovanie sa vzťahuje na konverziu jedného dátového typu na iný v programe. Typové odliatie je možné vykonať dvoma spôsobmi: automaticky kompilátorom a manuálne programátorom alebo používateľom. Typ Casting je známy aj ako Typová konverzia.
Predpokladajme napríklad, že dané údaje sú celočíselného typu a chceme ich previesť na typ float. Potrebujeme teda manuálne preniesť int dáta do typu float a tento typ pretypovania sa v C++ nazýva Type Casting.
java celé číslo na reťazec
int num = 5; float x; x = float(num); x = 5.0
2ndpríklad:
float num = 5.25; int x; x = int(num); Output: 5
Type Casting sa delí na dva typy: Implicitná konverzia alebo Implicitná Typová konverzia a Explicitná Typová konverzia alebo Explicitná Typová preliačina.
Implicitné typové obsadenie alebo implicitná typová konverzia
- Je známy ako automatické liatie typu.
- Automaticky sa konvertuje z jedného dátového typu na druhý bez akéhokoľvek externého zásahu, akým je napríklad programátor alebo používateľ. Znamená to, že kompilátor automaticky konvertuje jeden typ údajov na iný.
- Všetky typy údajov sa automaticky aktualizujú na najväčší typ bez straty akýchkoľvek informácií.
- V programe sa môže použiť iba vtedy, ak sú obe premenné navzájom kompatibilné.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Poznámka: Implicitné pretypovanie by sa malo vykonávať z nižších na vyššie typy údajov. V opačnom prípade to ovplyvní základný typ údajov, ktorý môže stratiť presnosť alebo údaje a kompilátor môže na tento účel blikať varovaním.
Program na použitie implicitného typu casting v C++
Vytvorme príklad na demonštráciu pretypovania jednej premennej na inú pomocou implicitného pretypovania v 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; }
Výkon:
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
Vo vyššie uvedenom programe sme deklarovali krátku premennú dátového typu x je 200 a celočíselnú premennú y. Potom y priradíme hodnotu x a kompilátor potom automaticky prevedie krátku dátovú hodnotu x na y, čo vráti y je 200.
V ďalších výrazoch sme deklarovali premennú typu int num je 20 a premennú typu znaku ch je 'a', čo je ekvivalentné celočíselnej hodnote 97. A potom pridáme tieto dve premenné, aby sme vykonali implicitnú konverziu, ktorý vráti výsledok výrazu je 117.
Podobne v treťom výraze pridáme celočíselnú premennú num je 20 a znakovú premennú ch je 65 a výsledok potom priradíme k premennej float val. Výsledok výrazu teda kompilátor automaticky skonvertuje na typ float.
Explicitné typové obsadenie alebo Explicitná typová konverzia
- Je tiež známy ako ručné odlievanie typu v programe.
- Programátor alebo používateľ ho manuálne prenesie na zmenu z jedného typu údajov na iný typ v programe. To znamená, že používateľ môže jednoducho prenášať jeden údaj do druhého podľa požiadaviek v programe.
- Nevyžaduje kontrolu kompatibility premenných.
- V tomto castingu môžeme upgradovať alebo downgradovať dátový typ jednej premennej na inú v programe.
- Používa operátor cast () na zmenu typu premennej.
Syntax pretypovania explicitného typu
(type) expression;
typ: Predstavuje užívateľom definované dáta, ktoré konvertujú daný výraz.
výraz: Predstavuje konštantnú hodnotu, premennú alebo výraz, ktorého typ údajov sa konvertuje.
Napríklad máme plávajúce ukazovacie číslo 4,534 a na prevod celočíselnej hodnoty príkaz ako:
int num; num = (int) 4.534; // cast into int data type cout << num;
Keď sa vykonajú vyššie uvedené príkazy, hodnota s pohyblivou rádovou čiarkou bude pretypovaná na typ údajov typu celé číslo pomocou operátora cast (). A plávajúca hodnota je priradená celočíselnému číslu, ktoré skracuje desatinnú časť a zobrazuje iba 4 ako celočíselnú hodnotu.
Program na demonštráciu použitia explicitného pretypovania v C++
Vytvorme jednoduchý program na pretypovanie premennej jedného typu do iného typu pomocou explicitného pretypovania v programovacom jazyku 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; }
Výkon:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
Vo vyššie uvedenom programe vezmeme dve celočíselné premenné, a a b, ktorých hodnoty sú 21 a 2. A potom vydelíme a b (21/2), čo vráti hodnotu typu 4 int.
V druhom výraze deklarujeme premennú typu float res, ktorá ukladá výsledky aab bez straty akýchkoľvek údajov pomocou operátora cast v metóde pretypovania explicitného typu.
Program na pretypovanie dvojitých údajov do typu int a float pomocou operátora cast
Uvažujme príklad na získanie plochy obdĺžnika preliatím údajov typu double do typu float a int v programovaní v 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; }
Výkon:
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
Niektoré rôzne typy typového odliatku
V type cast existuje operátor cast, ktorý núti jeden dátový typ konvertovať na iný dátový typ podľa potrieb programu. C++ má štyri rôzne typy operátora cast:
- Static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
Statické prenášanie:
static_cast je jednoduché pretypovanie v čase kompilácie, ktoré konvertuje alebo pretypuje jeden typ údajov na iný. To znamená, že za behu nekontroluje typ údajov, či je vykonané pretypovanie platné alebo nie. Preto je programátor alebo používateľ zodpovedný za to, aby konverzia bola bezpečná a platná.
zoznam triedenia java
static_cast je dostatočne schopný, aby mohol vykonávať všetky konverzie vykonávané implicitným pretypovaním. A tiež vykonáva konverzie medzi ukazovateľmi tried, ktoré si navzájom súvisia (upcast - > z odvodenej na základnú triedu alebo downcast - > zo základnej na odvodenú triedu).
Syntax statického obsadenia
static_cast (expression);
Program na demonštráciu použitia statického obsadenia
Vytvorme jednoduchý príklad na použitie statického pretypovania typu casting v programovaní v 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; }
Výkon:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Dynamické obsadenie
Dynamic_cast je prevádzkový operátor cast, ktorý sa používa na konverziu premennej jedného typu na iný iba na ukazovateľoch triedy a odkazoch. Znamená to, že skontroluje platné pretypovanie premenných v čase spustenia a ak pretypovanie zlyhá, vráti hodnotu NULL. Dynamické odlievanie je založené na mechanizme RTTI (Runtime Type Identification).
Program na demonštráciu použitia Dynamic Cast v C++
Vytvorme jednoduchý program na vykonávanie dynamic_cast v programovacom jazyku 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'; } }
Výkon:
Dynamic casting is done successfully.
Prehodnotiť typ obsadenia
Pretypovanie typu reinterpret_cast sa používa na pretypovanie ukazovateľa na akýkoľvek iný typ ukazovateľa, či daný ukazovateľ patrí k sebe alebo nie. To znamená, že nekontroluje, či je ukazovateľ alebo údaje, na ktoré ukazovateľ ukazuje, rovnaké alebo nie. A tiež vrhá ukazovateľ na celočíselný typ alebo naopak.
Syntax typu reinterpret_cast
reinterpret_cast expression;
Program na použitie Reinterpret Cast v C++
Napíšme program, ktorý demonštruje konverziu ukazovateľa pomocou reinterpretácie v jazyku 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; }
Výkon:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Cast
Const_cast sa používa na zmenu alebo manipuláciu so správaním const zdrojového ukazovateľa. Znamená to, že môžeme vykonať const dvoma spôsobmi: nastavením ukazovateľa const na ukazovateľ bez konštanty alebo odstránením alebo odstránením ukazovateľa const z ukazovateľa const.
Syntax typu Const Cast
const_cast exp;
Program na použitie Const Cast v C++
Napíšme program na pretypovanie zdrojového ukazovateľa na nepretypovaný ukazovateľ pomocou const_cast v 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; }
Výkon:
The value of ptr cast: 500