type conversions c
Погледајте конверзије различитих типова подржане у Ц ++.
Надамо се да бисте требали бити упознати са свим типовима података који су доступни у Ц ++ из наших ранијих водича. Понекад се може појавити потреба да морамо претворити један тип у други. То се назива конверзија типа или уливање типа.
У овом упутству ћемо размотрити разне претворбе типова подржане у Ц ++.
који је најбољи софтвер за уклањање малвера
=> Кликните овде за бесплатни курс Ц ++.
Шта ћете научити:
- Конверзије типа
- Имплицитна конверзија
- Експлицитна конверзија
- Врсте ливења
- Закључак
- Препоручено читање
Конверзије типа
Ц ++ подржава две врсте конверзија типова:
- Имплицитна конверзија типа: Имплицитна конверзија типа је аутоматска. Корисник не омета ову врсту конверзије и преводилац директно врши конверзију. Конверзија се обично врши када у изразу постоји више врста података. Али генерално, код ове врсте конверзије постоји могућност губитка података, губитка знакова или преливања података.
- Експлицитна конверзија типа: Експлицитна конверзија типа је дефинисана од стране корисника и обично се назива „ливење типа“. Овде корисник емитује или претвара вредност једног типа података у други, у зависности од захтева. Овакве конверзије су сигурније.
Сада ћемо детаљно видети обе врсте претворбе типова.
Имплицитна конверзија
У имплицитној конверзији, преводилац врши конверзије из једног типа података у други кад год израз има више врста података. Да би се спречио губитак података, све променљиве осталих типова података претварају се у највећи тип података. То се зове промоција.
Дозволите нам да разумемо имплицитну конверзију помоћу примера кода.
#include using namespace std; int main() { int num = 10; char ch = 'A'; cout<<'10 + 'A' = '< Излаз:
10 + 'А' = 75
флоат вал (10 + ‘а’) = 107
вар_инт = 1000
Горњи пример кода показује имплицитну конверзију. Прогласили смо целу вредност и променљиву знакова са вредностима 10 односно „А“. Када саберемо ове две променљиве, долази до имплицитне конверзије.
Како је цели број већи тип у овом изразу, променљива знака „А“ се претвара у његов целобројни еквивалент, тј. Вредност 65 (АСЦИИ вредност). Тако је резултат израза 75.
У следећи израз додајемо цео број и знак (’а’ -> 97), а затим додељујемо резултат плутајућем. Дакле, преводилац резултат израза имплицитно претвара у флоат.
У трећем изразу, кратка променљива инт претвара се у цео број имплицитно.
Белешка : У случају имплицитних конверзија, ако компајлер открије потенцијални губитак података, тада ће можда упозорити упозорење.
Експлицитна конверзија
Експлицитна конверзија је такође позната и као „ливење типа“ јер „пребацујемо“ један тип података у други тип података. Овде корисници експлицитно дефинишу ливење, за разлику од имплицитне конверзије где преводилац интерно врши конверзију.
Експлицитну конверзију можемо извршити на два начина:
# 1) Коришћење оператора доделе
Експлицитна конверзија или слање типова помоћу оператора доделе на неки начин се изводи снажно. Овде пребацујемо или конвертујемо један тип података у други тип података помоћу оператора доделе.
Општа синтакса је:
(data type) expression;
Следећи пример објашњава ово:
#include #include using namespace std; int main() { int sum; double salary = 4563.75; sum = (int)salary + 1000; cout<<'Sum = '< Излаз:
Збир = 5563
Цомп = 5563,2
У горњем примеру показали смо експлицитно ливење помоћу оператора доделе. Прво, променљиву плату типа доубле премештамо у целобројни тип. Даље, целобројну променљиву сум пребацимо у двоструки тип.
Као што је приказано у излазу, тип на који емитујемо означава коначни тип резултата израза.
Ово је повољно јер корисник може променити врсту израза према захтевима.
# 2) Коришћење Цаст Оператор-а
У овом типу ливења користимо „оператора ливења“ који је унарни оператор за прелазак са једног типа на други.
Врсте ливења
Имамо следеће типове ливења у зависности од оператора ливења којег користимо:
мирна веб сервиса тестирање питања за интервју
# 1) Статични лив
Статично ливење је најједноставније међу свим типовима који користе оператер ливења . Статични прелив је у стању да изврши све конверзије које се изврше имплицитно. Такође врши конверзије између показивача класа повезаних једни с другима (надовезивање -> из изведеног у базу или умањено -> из базе у изведено).
Осим горе наведених конверзија, статички прелив такође може претворити било који показивач у воид *.
Статични улог је састављени временски улог. То значи да током извршавања није извршена ниједна провјера да ли је изведена улога ваљана или не. Стога је на програмеру одговорност да осигура да конверзија буде сигурна и ваљана.
Другим речима, корисник мора да осигура да је конвертовани објекат био пун с обзиром на одредишни тип података.
Ми одређујемо статички улог на следећи начин:
static_cast (expression)
Да разумемо статичку глумачку поставу на примеру.
#include using namespace std; int main() { double df = 3.5 * 3.5 * 3.5; cout<<'Before casting: df = '<У горњем примеру, мало смо модификовали код тако да укључује променљиву знакова са вредношћу „А“. Затим декларишемо целобројни показивач и примењујемо статички прелив за претварање карактера у целобројни показивач.
Када компајлирамо овај програм добијамо следећи излаз.
У функцији „инт маин ()“:
10:35: грешка: неважећи статиц_цаст од типа „цхар *“ до типа „инт *“
Програм даје грешку за изведени статички улог јер је неважећи. Према томе, статички прелив дозвољава ваљано преливање типа или конверзије и даје грешку када покушавамо да извршимо неко нежељено преливање типова.
# 2) Динамично ливење
Динамичко пребацивање је извођење током извођења ради провере ваљаности пребацивања. Динамична цаст се изводи само на показивачима и референцама класе. Израз враћа НУЛЛ вредност ако пребацивање не успе.
Динамичка цаст користи механизам познат као РТТИ (Рунтиме Типе Идентифицатион) . РТТИ чини све информације о типу података објекта доступним током извођења и доступан је само за класе које имају најмање једну виртуелну функцију (полиморфни тип). РТТИ омогућава одређивање типа објекта током извођења или у време извршења.
Покушајмо са једним примером да бисмо разумели динамичку глумачку поставу.
#include #include using namespace std; class base {public: virtual void print(){}}; class derived:public base{}; int main() { base* b = new derived; derived* d = dynamic_cast(b); if(d != NULL) cout<<'Dynamic_cast done successfully'; else cout<<'Dynamic_cast not successful'; }
У овом програму смо дефинисали две класе, базу са виртуелном функцијом и изведене са основном класом, базом.
У главној функцији креирамо изведени објект класе на који показује показивач основне класе. Затим изводимо динамиц_цаст на основном показивачу указујући на изведену класу да би га пребацили на изведени показивач класе.
Као и у основној класи, база је полиморфна (садржи виртуелну функцију), динамички_каст је успешан.
Белешка: Ако уклонимо виртуелну функцију из горње класе, тада Динам_цаст неће успети јер РТТИ информације за објекте неће бити доступне.
Динамична глумачка екипа има главну сигурност у типу током извођења.
# 3) Поново тумачите Цаст
Ова врста гипса је најопаснија за употребу, јер делује на било којој врсти предмета, а да класе нису међусобно повезане.
Реинтепрет_цаст ради на било којим показивачима и претвара показивач било ког типа у било који други тип, без обзира на то да ли су показивачи међусобно повезани или не. Не проверава да ли су показивач или подаци на које показује показивач исти или не.
Оператор за пребацивање узима само један параметар, изворни показивач за претварање и не враћа никакву вредност. Једноставно претвара тип показивача.
Не бисмо смели да користимо ако није потребно. Изворни показивач обично откуцамо на његов оригинални тип.
како створити бинарно стабло претраживања у јави
Углавном радимо са битовима. Када се користи на логичким вредностима, логичке вредности се претварају у целобројне вредности, тј. 1 за тачно и 0 за нетачно.
Погледајмо пример тумачења улога:
#include using namespace std; int main() { int* ptr = new int(97); char* ch = reinterpret_cast(ptr); cout << ptr << endl; cout << ch << endl; cout << *ptr << endl; cout << *ch << endl; return 0; }
Излаз:
0к3еф3090
до
97
до
У горњем примеру, прогласили смо целобројни показивач птр који показује на вредност 97. Затим, декларишемо показивач знакова цх и пребацујемо птр на њега помоћу.
Даље, исписујемо разне вредности. Прво што исписујемо је птр који показује на целобројну локацију. Стога исписује адресу.
Следећа вредност цх садржи вредност 97 и тако исписује 'а' што је АСЦИИ еквивалент 97. Следећа вредност '* птр' садржи вредност 97 док '* цх' има АСЦИИ еквивалент 97, тј. 'А', како је изливена помоћу реинтерпрет_цаст.
# 4) Цонст Цаст
Оператор пребацивања користи се за промену или манипулисање чврстоћом изворног показивача. Под манипулацијом подразумевамо да може бити или постављање цонстнесс на нон-цонст показивач или уклањање цонстнесс из цонст показивача.
Услов за успешно постављање оператора је да показивач и извор који се емитују буду истог типа.
Узмимо пример да бисмо то разумели.
#include using namespace std; int printVal(int* ptr) { return(*ptr*10); } int main(void) { const int value = 10; const int *ptr = &value; int *ptr_cast = const_cast (ptr); cout <<'printVal returned = '<< printVal(ptr_cast); return 0; }
У овом примеру видимо да функција „принтВал“ прихвата показивач који није цонст. У главној функцији имамо цонст променљиву ‘валуе’ која је додељена цонст показивачу птр.
Да бисмо овај цонст показивач проследили функцији принтВал, пребацили смо га применом како бисмо уклонили цонстнесс. Затим преносимо показивач птр_цаст функцији да бисмо добили жељене резултате.
Закључак
Овим ћемо завршити ову тему претварања типова у Ц ++. Све смо видели о имплицитним и експлицитним конверзијама које се користе у Ц ++.
Међутим, треба бити свестан да би се спречило губљење података и друге такве потешкоће, конверзије или типографско приказивање треба примењивати паметно само ако ситуација захтева употребу.
=> Овде припазите на водич за обуку за почетнике Ц ++.
Препоручено читање
- Најбољи БЕСПЛАТНИ водичи за Ц #: Крајњи водич за Ц # за почетнике
- Укуцајте квалификације и класе складиштења у Ц ++
- Врсте тестирања миграције: Са сценаријима испитивања за сваки тип
- Како одлучити која врста тестирања је потребна за пројекат? - Ручно или аутоматизација
- Типови података Ц ++
- Испитивање оптерећења помоћу ХП ЛоадРуннер водича
- Променљиве у Ц ++
- Предлошци на Ц ++ са примерима