Този раздел ще обсъди преобразуването на типа на променливите в езика за програмиране C++. Преобразуването на тип се отнася до преобразуването на един тип данни в друг в програма. Преобразуването на типове може да се извърши по два начина: автоматично от компилатора и ръчно от програмиста или потребителя. Преобразуването на типове е известно още като преобразуване на типове.
Да предположим например, че дадените данни са цяло число и искаме да ги преобразуваме в плаващ тип. И така, трябва ръчно да преобразуваме int данни към типа float и този тип преобразуване се нарича преобразуване на типове в C++.
int num = 5; float x; x = float(num); x = 5.0
2ndпример:
сортиране на вмъкване
float num = 5.25; int x; x = int(num); Output: 5
Преобразуването на типове е разделено на два типа: неявно преобразуване или имплицитно преобразуване на типове и явно преобразуване на типове или явно преобразуване на типове.
Неявно преобразуване на типове или имплицитно преобразуване на типове
- Известно е като автоматично леене на типове.
- Той автоматично се преобразува от един тип данни в друг без външна намеса като програмист или потребител. Това означава, че компилаторът автоматично преобразува един тип данни в друг.
- Всички типове данни се надграждат автоматично до най-големия тип, без да се губи информация.
- Може да се прилага в програма само ако и двете променливи са съвместими една с друга.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Забележка: Неявното преобразуване на типове трябва да се извършва от ниски към по-високи типове данни. В противен случай това засяга основния тип данни, който може да загуби прецизност или данни и компилаторът може да мига предупреждение в този смисъл.
Програма за използване на имплицитно преобразуване на типове в C++
Нека създадем пример, за да демонстрираме преобразуването на една променлива в друга, използвайки неявното преобразуване на типове в 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; }
Изход:
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
В горната програма декларирахме променлива за кратък тип данни x е 200 и целочислена променлива y. След това присвояваме стойност x на y и след това компилаторът автоматично преобразува стойността на кратките данни x в y, което връща y е 200.
В следващите изрази декларирахме променлива тип int num е 20, а променлива тип символ ch е 'a', което е еквивалентно на целочислена стойност от 97. И след това добавяме тези две променливи, за да извършим имплицитното преобразуване, което връща резултата от израза е 117.
По същия начин в третия израз добавяме целочислената променлива num е 20 и символната променлива ch е 65 и след това присвояваме резултата на променливата с плаваща задна буква val. По този начин резултатът от израза се преобразува автоматично в тип float от компилатора.
Изрично преобразуване на тип или изрично преобразуване на тип
- Известно е още като ръчно преобразуване на типове в програма.
- Той се преобразува ръчно от програмиста или потребителя за промяна от един тип данни в друг тип в програмата. Това означава, че потребителят може лесно да прехвърли едни данни към други според изискването в дадена програма.
- Не изисква проверка на съвместимостта на променливите.
- При това кастинг можем да надградим или понижим типа данни на една променлива към друга в програма.
- Той използва оператора cast (), за да промени типа на променлива.
Синтаксис на явното преобразуване на типове
(type) expression;
Тип: Той представлява дефинираните от потребителя данни, които преобразуват дадения израз.
израз: Той представлява константна стойност, променлива или израз, чийто тип данни се преобразува.
Например, имаме плаващо сочещо число е 4,534 и за преобразуване на цяло число, изразът като:
int num; num = (int) 4.534; // cast into int data type cout << num;
Когато горните оператори се изпълнят, стойността с плаваща запетая ще бъде преобразувана в целочислен тип данни с помощта на оператора cast (). И плаващата стойност се присвоява на цяло число num, което съкращава десетичната част и показва само 4 като цяло число.
Програма за демонстриране на използването на изрично преобразуване на типове в C++
дървовидна карта
Нека създадем проста програма за преобразуване на една променлива тип в друг тип, използвайки изричното преобразуване на типове в езика за програмиране 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; }
Изход:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
В горната програма вземаме две цели променливи, a и b, чиито стойности са 21 и 2. И след това разделяме a на b (21/2), което връща стойност от тип int 4.
Във втория израз ние декларираме променлива тип float res, която съхранява резултатите от a и b, без да губи каквито и да е данни, използвайки оператора за прехвърляне в метода за изрично преобразуване на типа.
Програма за прехвърляне на двойни данни в тип int и float с помощта на оператора за прехвърляне
Нека разгледаме пример за получаване на площта на правоъгълника чрез прехвърляне на двойни данни в тип float и int в програмирането на 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; }
Изход:
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
Някои различни типове тип кастинг
При преобразуването на типове има оператор за преобразуване, който принуждава един тип данни да бъде преобразуван в друг тип данни според нуждите на програмата. C++ има четири различни типа оператор за прехвърляне:
- Static_cast
- динамично_предаване
- const_cast
- reinterpret_cast
Статично предаване:
Static_cast е просто преобразуване по време на компилиране, което преобразува или преобразува един тип данни в друг. Това означава, че не проверява типа данни по време на изпълнение дали извършеното прехвърляне е валидно или не. По този начин програмистът или потребителят носи отговорността да гарантира, че преобразуването е безопасно и валидно.
Static_cast е достатъчно способен, за да може да извърши всички преобразувания, извършени от имплицитното предаване. И също така извършва преобразувания между указатели на класове, свързани един с друг (upcast -> от производен към базов клас или downcast -> от основен към производен клас).
Синтаксис на статичното предаване
static_cast (expression);
Програма за демонстриране на използването на Static Cast
Нека създадем прост пример за използване на статичното преобразуване на преобразуването на типове в програмирането на 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; }
Изход:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Динамично предаване
Dynamic_cast е оператор за изпълнение по време на изпълнение, използван за извършване на преобразуване на един тип променлива в друг само върху указатели и препратки към класове. Това означава, че проверява валидното кастинг на променливите по време на изпълнение и ако кастингът е неуспешен, връща NULL стойност. Динамичното кастинг се основава на RTTI (Runtime Type Identification) механизъм.
Програма за демонстриране на използването на Dynamic Cast в C++
Нека създадем проста програма за изпълнение на dynamic_cast на езика за програмиране 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'; } }
Изход:
Dynamic casting is done successfully.
Повторно тълкуване на типа актьорски състав
Преобразуването на типа reinterpret_cast се използва за прехвърляне на указател към всеки друг тип указател, независимо дали даденият указател принадлежи един на друг или не. Това означава, че не проверява дали указателят или данните, към които сочи указателят, са еднакви или не. И също така прехвърля указател към целочислен тип или обратно.
Синтаксис на типа reinterpret_cast
reinterpret_cast expression;
Програма за използване на Reinterpret Cast в C++
Нека напишем програма, която да демонстрира преобразуването на указател, използвайки повторното интерпретиране на езика 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; }
Изход:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Const Cast
Const_cast се използва за промяна или манипулиране на const поведението на изходния указател. Това означава, че можем да изпълним const по два начина: задаване на константен указател към неконстантен указател или изтриване или премахване на const от константен указател.
Синтаксис на типа Const Cast
Шрея Гошал първи съпруг
const_cast exp;
Програма за използване на Const Cast в C++
Нека напишем програма за прехвърляне на изходен указател към непреведен указател, използвайки const_cast в 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; }
Изход:
The value of ptr cast: 500