logo

Приведення типів у C++

У цьому розділі буде обговорено приведення типів змінних у мові програмування C++. Приведення типів означає перетворення одного типу даних в інший у програмі. Приведення типів може виконуватися двома способами: автоматично компілятором і вручну програмістом або користувачем. Приведення типу також відоме як перетворення типу.

Приведення типів у 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++ має чотири різних типи оператора приведення:

  1. Static_cast
  2. динамічний_каст
  3. const_cast
  4. 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