У цьому розділі буде обговорено приведення типів змінних у мові програмування C++. Приведення типів означає перетворення одного типу даних в інший у програмі. Приведення типів може виконуватися двома способами: автоматично компілятором і вручну програмістом або користувачем. Приведення типу також відоме як перетворення типу.
Наприклад, припустімо, що задані дані є цілим типом, і ми хочемо перетворити їх у тип float. Отже, нам потрібно вручну привести дані 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.
Явне приведення типу або явне перетворення типу
10 мл в унції
- Це також відоме як ручне приведення типу в програмі.
- Він вручну створюється програмістом або користувачем для зміни одного типу даних у програмі на інший. Це означає, що користувач може легко трансформувати одні дані в інші відповідно до вимог програми.
- Це не вимагає перевірки сумісності змінних.
- У цьому кастингу ми можемо оновити або знизити тип даних однієї змінної до іншої в програмі.
- Він використовує оператор 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), що повертає значення типу 4 int.
У другому виразі ми оголошуємо змінну типу 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
Статичний акторський склад:
багаторядковий коментар powershell
Static_cast — це просте приведення під час компіляції, яке перетворює або приводить один тип даних до іншого. Це означає, що він не перевіряє тип даних під час виконання, чи є виконане приведення дійсним чи ні. Таким чином, програміст або користувач несе відповідальність за те, щоб перетворення було безпечним і дійсним.
Static_cast достатньо потужний, щоб виконувати всі перетворення, здійснені неявним приведенням. Він також виконує перетворення між покажчиками класів, пов’язаних один з одним (перетворення -> від похідного до базового класу або низхідне -> від базового до похідного класу).
Синтаксис статичного приведення
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
dynamic_cast — це оператор приведення під час виконання, який використовується для перетворення однієї змінної типу в іншу лише за покажчиками класів і посиланнями. Це означає, що він перевіряє дійсне приведення змінних під час виконання, і якщо приведення не вдається, повертає значення NULL. Динамічний кастинг базується на механізмі RTTI (Ідентифікація типу виконання).
Програма для демонстрації використання 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 з покажчика const.
Синтаксис типу Const Cast
замінити колір у gimp
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