Tässä osiossa käsitellään muuttujien tyyppivalua C++-ohjelmointikielellä. Tyyppivalu tarkoittaa yhden tietotyypin muuntamista toiseksi ohjelmassa. Typecasting voidaan tehdä kahdella tavalla: kääntäjä automaattisesti ja ohjelmoija tai käyttäjä manuaalisesti. Type Casting tunnetaan myös nimellä Type Conversion.
Oletetaan esimerkiksi, että annettu data on kokonaislukutyyppiä ja haluamme muuntaa sen float-tyypiksi. Joten meidän on valattava manuaalisesti int-tiedot float-tyyppiin, ja tämän tyyppistä valua kutsutaan C++:ssa Type Castingiksi.
int num = 5; float x; x = float(num); x = 5.0
2ndesimerkki:
float num = 5.25; int x; x = int(num); Output: 5
Tyyppisuora on jaettu kahteen tyyppiin: implisiittinen muunnos tai implisiittisen tyypin suoratoisto ja eksplisiittisen tyypin muuntaminen tai eksplisiittinen tyypin suoratoisto.
Implisiittisen tyypin suoratoisto tai implisiittisen tyypin muunnos
- Se tunnetaan automaattisena tyyppivaluna.
- Se muuntuu automaattisesti yhdestä tietotyypistä toiseen ilman ulkoista puuttumista, kuten ohjelmoijaa tai käyttäjää. Se tarkoittaa, että kääntäjä muuntaa automaattisesti yhden tietotyypin toiseksi.
- Kaikki tietotyypit päivitetään automaattisesti suurimpaan tyyppiin menettämättä tietoja.
- Sitä voidaan käyttää vain ohjelmassa, jos molemmat muuttujat ovat yhteensopivia keskenään.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Huomautus: Implisiittisen tyypin suoratoisto tulee tehdä matalasta korkeampaan tietotyyppeihin. Muussa tapauksessa se vaikuttaa perustietotyyppiin, mikä voi menettää tarkkuutta tai tietoja, ja kääntäjä saattaa antaa tästä varoituksen.
Ohjelma käyttää implisiittistä tyyppivalua C++:ssa
Luodaan esimerkki havainnollistaaksesi yhden muuttujan valua toiseen käyttämällä implisiittistä tyyppivalua C++:ssa.
#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; }
Lähtö:
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
Yllä olevassa ohjelmassa määritimme lyhyen tietotyyppimuuttujan x on 200 ja kokonaislukumuuttujan y. Tämän jälkeen annamme y:lle arvon x, ja sitten kääntäjä muuntaa automaattisesti lyhyen dataarvon x y:ksi, joka palauttaa y:n 200:ksi.
Seuraavissa lausekkeissa ilmoitimme, että int-tyyppinen muuttuja num on 20 ja merkkityyppimuuttuja ch on 'a', mikä vastaa kokonaislukuarvoa 97. Ja sitten lisäämme nämä kaksi muuttujaa suorittaaksemme implisiittisen muunnoksen, joka palauttaa lausekkeen tuloksen 117.
Samoin kolmanteen lausekkeeseen lisätään kokonaislukumuuttuja num on 20 ja merkkimuuttuja ch on 65, ja sitten tulos liitetään kelluvamuuttujaan val. Tällöin kääntäjä muuntaa lausekkeen tuloksen automaattisesti float-tyyppiseksi.
Explicit Type Casting tai Explicit Type Conversio
- Se tunnetaan myös manuaalisena valuna ohjelmassa.
- Ohjelmoija tai käyttäjä lähettää sen manuaalisesti vaihtaakseen ohjelman tietotyypistä toiseen. Se tarkoittaa, että käyttäjä voi helposti suoratoistaa dataa toiselle ohjelman vaatimusten mukaisesti.
- Se ei vaadi muuttujien yhteensopivuuden tarkistamista.
- Tässä castingissa voimme päivittää tai alentaa yhden muuttujan tietotyyppiä toiseksi ohjelmassa.
- Se käyttää cast () -operaattoria muuttaakseen muuttujan tyyppiä.
Eksplisiittisen tyypin suoratoiston syntaksi
(type) expression;
tyyppi: Se edustaa käyttäjän määrittämää dataa, joka muuntaa annetun lausekkeen.
ilmaisu: Se edustaa vakioarvoa, muuttujaa tai lauseketta, jonka tietotyyppi muunnetaan.
Meillä on esimerkiksi kelluva osoitinluku 4,534, ja kokonaislukuarvon muuntamiseksi lauseke on:
int num; num = (int) 4.534; // cast into int data type cout << num;
Kun yllä olevat lauseet suoritetaan, liukulukuarvo muutetaan kokonaislukutietotyypiksi käyttämällä cast () -operaattoria. Ja float-arvo on määritetty kokonaisluvulle, joka katkaisee desimaaliosan ja näyttää vain 4:n kokonaislukuarvona.
Ohjelma, joka demonstroi eksplisiittisen tyypin valun käyttöä C++:ssa
Luodaan yksinkertainen ohjelma heittääksesi yhden tyypin muuttujan toiseen tyyppiin käyttämällä eksplisiittistä tyyppiä C++-ohjelmointikielessä.
#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; }
Lähtö:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
Yllä olevassa ohjelmassa otetaan kaksi kokonaislukumuuttujaa, a ja b, joiden arvot ovat 21 ja 2. Sitten jaetaan a b:llä (21/2), joka palauttaa 4 int -tyypin arvon.
Toisessa lausekkeessa määritetään float-tyyppinen muuttuja res, joka tallentaa a:n ja b:n tulokset menettämättä mitään dataa käyttämällä cast-operaattoria eksplisiittisen tyypin cast-menetelmässä.
Ohjelma heittää kaksoisdataa int- ja float-tyyppiin cast-operaattorilla
Tarkastellaan esimerkkiä suorakulmion pinta-alan saamiseksi heittämällä kaksoisdataa float- ja int-tyyppiin C++-ohjelmoinnissa.
#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; }
Lähtö:
kokoelmat javassa
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
Joitakin erilaisia Type Casting -tyyppejä
Type castissa on cast-operaattori, joka pakottaa yhden tietotyypin muuttamaan toiseksi tietotyypiksi ohjelman tarpeiden mukaan. C++:ssa on neljä erilaista cast-operaattoria:
- Static_cast
- dynaaminen_cast
- const_cast
- tulkita uudelleen
Staattinen näyttelijä:
Static_cast on yksinkertainen käännösaikalähetys, joka muuntaa tai lähettää yhden tietotyypin toiseksi. Se tarkoittaa, että se ei tarkista tietotyyppiä suorituksen aikana, onko suoritettu suoratoisto kelvollinen vai ei. Siten ohjelmoijalla tai käyttäjällä on vastuu varmistaa, että muunnos oli turvallinen ja kelvollinen.
Static_cast pystyy suorittamaan kaikki implisiittisen castin suorittamat muunnokset. Ja se myös suorittaa muunnokset toisiinsa liittyvien luokkien osoittimien välillä (upcast -> johdetuista perusluokista tai alaspäin -> perusluokista johdettuun luokkaan).
Staattisen Castin syntaksi
static_cast (expression);
Ohjelma, joka esittelee Static Castin käyttöä
Luodaan yksinkertainen esimerkki tyypin castingin staattisen heiton käyttämiseksi C++-ohjelmoinnissa.
#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; }
Lähtö:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Dynaaminen Cast
Dynaaminen_cast on ajonaikainen cast-operaattori, jota käytetään muuntamaan yhden tyyppinen muuttuja toiseksi vain luokkaosoittimissa ja viitteissä. Se tarkoittaa, että se tarkistaa muuttujien kelvollisen heiton ajon aikana, ja jos suoratoisto epäonnistuu, se palauttaa NULL-arvon. Dynaaminen Casting perustuu RTTI (Runtime Type Identification) -mekanismiin.
Ohjelma, joka demonstroi Dynamic Castin käyttöä C++:ssa
Luodaan yksinkertainen ohjelma dynamic_cast-lähetyksen suorittamiseksi C++-ohjelmointikielellä.
#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'; } }
Lähtö:
Dynamic casting is done successfully.
Tulkitse Cast-tyyppi uudelleen
Reinterpret_cast-tyyppistä valua käytetään osoittimen heittämiseen minkä tahansa muun tyyppiseen osoittimeen riippumatta siitä, kuuluvatko annetut osoitin toisiinsa vai eivät. Se tarkoittaa, että se ei tarkista, ovatko osoitin tai osoittimen osoittamat tiedot samat vai eivät. Ja se myös heitti osoittimen kokonaislukutyyppiin tai päinvastoin.
Reinterpret_cast-tyypin syntaksi
reinterpret_cast expression;
Ohjelma käyttää uudelleen Cast Castia C++:ssa
Kirjoitetaan ohjelma, joka havainnollistaa osoittimen muuntamista käyttämällä uudelleentulkintaa C++-kielellä.
#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; }
Lähtö:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Cast
Const_cast-parametria käytetään muuttamaan tai manipuloimaan lähdeosoittimen const-käyttäytymistä. Se tarkoittaa, että voimme suorittaa const kahdella tavalla: asettamalla const-osoittimen ei-const-osoittimeen tai poistamalla tai poistamalla const-osoittimen.
Const Cast -tyypin syntaksi
const_cast exp;
Ohjelma käyttää Const Castia C++:ssa
Kirjoitetaan ohjelma, joka lähettää lähdeosoittimen ei-cast-osoittimeen käyttämällä const_cast-funktiota C++:ssa.
#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; }
Lähtö:
The value of ptr cast: 500