У овом одељку ће се расправљати о преливању типа променљивих у програмском језику Ц++. Преливање типа односи се на конверзију једног типа података у други у програму. Пребацивање типова се може извршити на два начина: аутоматски од стране компајлера и ручно од стране програмера или корисника. Пребацивање типа је такође познато као конверзија типа.
На пример, претпоставимо да су дати подаци целобројног типа и желимо да их конвертујемо у тип са плутајућим бројем. Дакле, морамо ручно да пребацимо инт податке у тип флоат, а овај тип кастинга се у Ц++-у зове Типе Цастинг.
int num = 5; float x; x = float(num); x = 5.0
2ндпример:
float num = 5.25; int x; x = int(num); Output: 5
Пребацивање типа је подељено на два типа: имплицитна конверзија или имплицитна конверзија типа и експлицитна конверзија типа или експлицитна конверзија типа.
Имплицитна конверзија типа или имплицитна конверзија типа
- Познато је као ливење аутоматског типа.
- Аутоматски се конвертује из једног типа података у други без икакве спољне интервенције као што је програмер или корисник. То значи да компајлер аутоматски конвертује један тип података у други.
- Сви типови података се аутоматски надограђују на највећи тип без губитка информација.
- Може се применити у програму само ако су обе варијабле компатибилне једна са другом.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Напомена: Имплицитно пребацивање типа треба да се врши од нижих до виших типова података. У супротном, то утиче на основни тип података, који може изгубити прецизност или податке, а компајлер би могао да прикаже упозорење о томе.
Програм за коришћење имплицитног превођења типа у Ц++
Хајде да направимо пример да демонстрирамо преливање једне променљиве у другу користећи имплицитно превођење типа у Ц++.
#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; }
Излаз:
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
У горњем програму, декларисали смо кратку променљиву типа података к је 200 и целобројну променљиву и. Након тога, додељујемо к вредност и, а затим компајлер аутоматски конвертује кратку вредност података к у и, што враћа и је 200.
У следећим изразима, декларисали смо да је променљива типа инт нум 20, а променљива типа карактера цх је 'а', што је еквивалентно целобројној вредности од 97. И онда, додајемо ове две променљиве да извршимо имплицитну конверзију, који враћа резултат израза је 117.
Слично томе, у трећем изразу додајемо целобројну променљиву нум је 20, а карактерну променљиву цх је 65, а затим додељујемо резултат променљивој са плутајућим вредностима вал. Тако резултат израза компајлер аутоматски конвертује у тип флоат.
Експлицитно пребацивање типа или експлицитна конверзија типа
- Такође је познато као ручно ливење у програму.
- Програмер или корисник га ручно пушта да би се променио из једног типа података у други тип у програму. То значи да корисник може лако пребацити један податак у други у складу са захтевима у програму.
- Не захтева проверу компатибилности променљивих.
- У овом кастингу можемо надоградити или смањити тип података једне променљиве на другу у програму.
- Користи оператор цаст () да промени тип променљиве.
Синтакса експлицитног превођења типа
(type) expression;
тип: Он представља кориснички дефинисане податке који конвертују дати израз.
израз: Представља вредност константе, променљиву или израз чији се тип података конвертује.
'абц је у бројевима'
На пример, имамо број са плутајућим показивачем 4.534, а да бисмо конвертовали целобројну вредност, исказ је као:
int num; num = (int) 4.534; // cast into int data type cout << num;
Када се изврше горе наведени искази, вредност са покретним зарезом ће бити пребачена у целобројни тип података помоћу оператора цаст (). А флоат вредност се додељује целом броју који скраћује децимални део и приказује само 4 као целобројну вредност.
Програм за демонстрацију употребе експлицитног преливања типова у Ц++
Хајде да направимо једноставан програм за пребацивање једне променљиве типа у други тип користећи експлицитно преливање типа у програмском језику Ц++.
#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; }
Излаз:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
У горњем програму узимамо две целобројне променљиве, а и б, чије су вредности 21 и 2. А затим поделимо а са б (21/2) што враћа вредност типа 4 инт.
У другом изразу, декларишемо променљиву типа флоат рес која чува резултате а и б без губљења било каквих података користећи цаст оператор у методи експлицитног типа цаст.
Програм за пребацивање двоструких података у тип инт и флоат користећи оператор цаст
Хајде да размотримо пример да добијемо површину правоугаоника убацивањем дуплих података у тип флоат и инт у Ц++ програмирању.
#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; }
Излаз:
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
Неки различити типови типа Цастинг
У типу цаст, постоји цаст оператор који присиљава један тип података да се конвертује у други тип података у складу са потребама програма. Ц++ има четири различита типа оператора цаст:
- Статиц_цаст
- динамиц_цаст
- цонст_цаст
- реинтерпрет_цаст
Статички глумци:
Статиц_цаст је једноставно пребацивање у време компајлирања које претвара или претвара један тип података у други. То значи да не проверава тип података у току извршавања да ли је извршено пребацивање важеће или не. Стога програмер или корисник има одговорност да осигура да је конверзија безбедна и валидна.
Статиц_цаст је довољно способан да може да изврши све конверзије које спроводи имплицитно пребацивање. Такође врши конверзије између показивача класа повезаних једна са другом (упцаст - > из изведене у основну класу или довнцаст - > из основне у изведену класу).
Синтакса статичког глумца
static_cast (expression);
Програм за демонстрацију употребе Статиц Цаст
Хајде да направимо једноставан пример за коришћење статичког преливања типа у Ц++ програмирању.
#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; }
Излаз:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Динамиц Цаст
динамиц_цаст је рунтиме цаст оператор који се користи за обављање конверзије једне променљиве типа у другу само на показивачима класа и референцама. То значи да проверава валидно пребацивање променљивих у време извођења, и ако пребацивање не успе, враћа вредност НУЛЛ. Динамичко пребацивање је засновано на РТТИ (Рунтиме Типе Идентифицатион) механизму.
Програм за демонстрацију употребе Динамиц Цаст у Ц++
Хајде да направимо једноставан програм за извођење динамиц_цаст у програмском језику Ц++.
#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'; } }
Излаз:
Dynamic casting is done successfully.
Реинтерпретирајте врсту Цаст
Пребацивање типа реинтерпрет_цаст се користи за пребацивање показивача на било који други тип показивача без обзира да ли дати показивач припада један другом или не. То значи да не проверава да ли су показивач или подаци на које показује показивач исти или не. И такође баца показивач на целобројни тип или обрнуто.
Синтакса типа реинтерпрет_цаст
reinterpret_cast expression;
Програм за коришћење Реинтерпрет Цаст у Ц++
Хајде да напишемо програм који ће демонстрирати конверзију показивача користећи реинтерпретацију у језику Ц++.
#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; }
Излаз:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Цонст Цаст
Цонст_цаст се користи за промену или манипулисање константним понашањем изворног показивача. То значи да можемо извршити цонст на два начина: постављањем цонст показивача на показивач који није константан или брисањем или уклањањем цонст из цонст показивача.
Синтакса типа Цонст Цаст
const_cast exp;
Програм за коришћење Цонст Цаст у Ц++
Хајде да напишемо програм за пребацивање изворног показивача на показивач који није претворен користећи цонст_цаст у Ц++.
#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; }
Излаз:
The value of ptr cast: 500