V tem razdelku bomo obravnavali pretvorbo vrst spremenljivk v programskem jeziku C++. Pretvorba tipa se nanaša na pretvorbo enega podatkovnega tipa v drugega v programu. Prevajanje tipov se lahko izvede na dva načina: samodejno s strani prevajalnika in ročno s strani programerja ali uporabnika. Ulivanje tipov je znano tudi kot pretvorba tipov.
Na primer, predpostavimo, da so podani podatki celoštevilski tip in jih želimo pretvoriti v plavajoči tip. Podatke int moramo torej ročno pretvoriti v tip float in ta vrsta pretvorbe se v C++ imenuje ulivanje tipa.
int num = 5; float x; x = float(num); x = 5.0
2ndprimer:
float num = 5.25; int x; x = int(num); Output: 5
Ulivanje vrst je razdeljeno na dve vrsti: implicitna pretvorba ali implicitno ulivanje vrst in eksplicitna pretvorba vrst ali eksplicitno ulivanje vrst.
razvrsti arraylist v Javi
Implicitno pretvorbo tipa ali implicitno pretvorbo tipa
- Znano je kot samodejno litje tipa.
- Samodejno se pretvori iz ene vrste podatkov v drugo brez kakršnih koli zunanjih posegov, kot sta programer ali uporabnik. To pomeni, da prevajalnik samodejno pretvori en podatkovni tip v drugega.
- Vse vrste podatkov se samodejno nadgradijo na največjo vrsto brez izgube informacij.
- V programu se lahko uporablja le, če sta obe spremenljivki med seboj združljivi.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Opomba: Implicitno prelivanje tipov je treba izvesti od nizkih k višjim podatkovnim tipom. V nasprotnem primeru vpliva na osnovni podatkovni tip, ki lahko izgubi natančnost ali podatke, prevajalnik pa lahko v zvezi s tem prikaže opozorilo.
Program za uporabo implicitnega pretvorbe tipa v C++
Ustvarimo primer za prikaz pretvorbe ene spremenljivke v drugo z uporabo implicitnega pretvorbe tipa 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; }
Izhod:
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
V zgornjem programu smo deklarirali kratko spremenljivko podatkovnega tipa x je 200 in celoštevilsko spremenljivko y. Nato y dodelimo vrednost x, nato pa prevajalnik samodejno pretvori vrednost kratkih podatkov x v y, kar vrne y 200.
V naslednjih izrazih smo razglasili, da je spremenljivka tipa int num 20, spremenljivka tipa znaka ch pa je 'a', kar je enakovredno celoštevilski vrednosti 97. Nato dodamo ti dve spremenljivki, da izvedemo implicitno pretvorbo, ki vrne rezultat izraza je 117.
Podobno v tretjem izrazu dodamo celoštevilsko spremenljivko num je 20 in znakovno spremenljivko ch 65, nato pa rezultat dodelimo plavajoči spremenljivki val. Tako rezultat izraza prevajalnik samodejno pretvori v tip float.
Eksplicitno pretvorbo tipa ali eksplicitno pretvorbo tipa
- Znano je tudi kot ročno ulivanje tipa v programu.
- Ročno ga pretvori programer ali uporabnik, da spremeni iz ene vrste podatkov v drugo vrsto v programu. To pomeni, da lahko uporabnik enostavno pretvori en podatek v drugega glede na zahteve v programu.
- Ne zahteva preverjanja združljivosti spremenljivk.
- Pri tem ulivanju lahko nadgradimo ali znižamo podatkovni tip ene spremenljivke v drugo v programu.
- Za spreminjanje vrste spremenljivke uporablja operator cast ().
Sintaksa eksplicitnega ulitja tipa
(type) expression;
vrsta: Predstavlja uporabniško določene podatke, ki pretvorijo dani izraz.
izraz: Predstavlja konstantno vrednost, spremenljivko ali izraz, katerega podatkovni tip se pretvori.
Na primer, imamo plavajoče kazalno število 4,534 in za pretvorbo cele vrednosti je stavek kot:
int num; num = (int) 4.534; // cast into int data type cout << num;
Ko se zgornji stavki izvedejo, bo vrednost s plavajočo vejico pretvorjena v celoštevilski podatkovni tip z uporabo operatorja cast (). In plavajoča vrednost je dodeljena celemu številu num, ki skrajša decimalni del in prikaže samo 4 kot celo število.
Program za predstavitev uporabe eksplicitnega pretvorbe tipa v C++
Ustvarimo preprost program za pretvorbo ene spremenljivke tipa v drug tip z eksplicitnim pretvorbo tipa v programskem jeziku 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; }
Izhod:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
V zgornjem programu vzamemo dve celoštevilski spremenljivki, a in b, katerih vrednosti sta 21 in 2. Nato delimo a z b (21/2), kar vrne vrednost tipa 4 int.
V drugem izrazu deklariramo spremenljivko res s plavajočim tipom, ki shrani rezultate a in b, ne da bi pri tem izgubila kakršne koli podatke z uporabo operatorja cast v eksplicitni metodi cast-a.
Program za pretvorbo dvojnih podatkov v tip int in float z uporabo operatorja prelivanja
Oglejmo si primer, da dobimo površino pravokotnika s pretvorbo dvojnih podatkov v tip float in int v programiranju 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; }
Izhod:
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
Nekaj različnih vrst ulitkov tipa
Pri pretvorbi tipa obstaja operater pretvorbe, ki prisili, da se en tip podatkov pretvori v drug tip podatkov glede na potrebe programa. C++ ima štiri različne vrste operatorja za pretvorbo:
- Static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
Statična zasedba:
Static_cast je preprosta pretvorba v času prevajanja, ki pretvori ali pretvori en podatkovni tip v drugega. To pomeni, da med izvajanjem ne preverja vrste podatkov, ali je izvedena pretvorba veljavna ali ne. Tako je programer ali uporabnik dolžan zagotoviti, da je bila pretvorba varna in veljavna.
Static_cast je dovolj zmogljiv, da lahko izvede vse pretvorbe, ki jih izvede implicitna oddaja. Izvaja tudi pretvorbe med kazalci razredov, ki so med seboj povezani (upcast -> iz izpeljanega v osnovni razred ali navzdol -> iz osnovnega v izpeljani razred).
Sintaksa statične zasedbe
static_cast (expression);
Program za predstavitev uporabe Static Cast
Ustvarimo preprost primer za uporabo statičnega ulivanja tipa v programiranju 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; }
Izhod:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Dynamic Cast
Dynamic_cast je izvajalni operater za pretvorbo, ki se uporablja za pretvorbo ene spremenljivke tipa v drugo samo na kazalcih razreda in referencah. To pomeni, da preveri veljavno pretvorbo spremenljivk v času izvajanja in če pretvorba ne uspe, vrne vrednost NULL. Dinamično ulivanje temelji na mehanizmu RTTI (Runtime Type Identification).
Program za predstavitev uporabe Dynamic Cast v C++
Ustvarimo preprost program za izvajanje dynamic_cast v programskem jeziku 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'; } }
Izhod:
Dynamic casting is done successfully.
Ponovno interpretirajte Cast Cast
Pretvorba tipa reinterpret_cast se uporablja za pretvorbo kazalca na katero koli drugo vrsto kazalca, ne glede na to, ali dani kazalec pripada drug drugemu ali ne. To pomeni, da ne preverja, ali so kazalec ali podatki, na katere kaže kazalec, enaki ali ne. In tudi vrže kazalec na celoštevilski tip ali obratno.
Sintaksa tipa reinterpret_cast
reinterpret_cast expression;
Program za uporabo Reinterpret Cast v C++
Napišimo program za prikaz pretvorbe kazalca z uporabo reinterpretacije v jeziku 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; }
Izhod:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Cast
Const_cast se uporablja za spreminjanje ali manipulacijo obnašanja const izvornega kazalca. To pomeni, da lahko izvedemo const na dva načina: nastavitev kazalca const na nekonstanten kazalec ali brisanje ali odstranjevanje const iz kazalca const.
Sintaksa tipa Const Cast
const_cast exp;
Program za uporabo Const Cast v C++
Napišimo program za pretvorbo izvornega kazalca v kazalec, ki ni oddan z uporabo 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; }
Izhod:
The value of ptr cast: 500