Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

3.6. Запис арифметичних виразів

Оператори, літерали і змінні – це все складові виразів. Ймовірно, Ви вже знайомі з виразами з попереднього досвіду програмування або ще зі шкільного курсу алгебри. У наступних підрозділах спробуємо коротко розглянути основні аспекти виразів, які стосуються їх використання у мові програмування C++.

3.6.1. Перетворення типів у виразах

Якщо у виразі змішані різні типи літералів і змінних, то компілятор перетворить їх до одного типу. По-перше, всі char- і short int-значення автоматично перетворяться (з розширенням "типорозміру") до типу int. Цей процес називається цілочисельним розширенням (integral promotion). По-друге, всі операнди перетворяться (також з розширенням "типорозміру") до типу найбільшого операнда. Цей процес називається розширенням типу (type promotion), причому він виконується по-операційно. Наприклад, якщо один операнд має тип int, а інший – long int, то тип int розширюється в тип long int. Або, якщо хоча б один з операндів має тип double, будь-який інший операнд призводить до типу double. Це означає, що такі перетворення, як з типу char в тип double, цілком допускаються. Після перетворення обидва операнди матимуть один і той самий тип, а результат виконання операції – тип, який збігається з типом операндів.

Розглянемо, наприклад, перетворення типів, які схематично представлено на рис. 3.1. Спочатку символ ch піддається процесу "розширення" типу і перетвориться в значення типу int. Потім результат виконання операції ch/izm приводиться до типу double, оскільки результат добутку f*d має тип double. Результат виконання всього виразу отримає тип double, оскільки до моменту його обчислення обидва операнди матимуть тип double.

Рис. 3.1. Приклад|зразок| перетворення типів у мові програмування C++

3.6.2. Перетворення, що відбуваються під час використання типу bool

Як ми вже зазначали вище, значення типу bool автоматично перетворяться в цілі числа 0 або 1 під час використання у виразі цілочисельного типу. Під час перетворення цілочисельного результату в тип bool нуль перетвориться в false, а ненульове значення – в true. І хоча тип bool відносно недавно був доданий в мову програмування C++, виконання автоматичних перетворень, пов'язаних з типом bool, означає, що його введення у мові програмування C++ не має негативних наслідків для коду програми, написаного для попередніх версій мови програмування C++. Понад це, автоматичні перетворення дають змогу мові програмування C++ підтримувати початкове визначення значень ФАЛЬШ і ІСТИНА у вигляді нуля і ненульового значення. Таким чином, тип bool дуже зручний для програміста.

3.6.3. Операція приведення типів даних

У мові програмування C++ передбачено можливість встановлення для виразу заданий тип. Для цього використовується операція приведення типів (cast). Мова програмування C++ визначає п'ять видів таких операцій. У цьому розділі розглянемо тільки один з них, а інші чотири – описано нижче у цьому навчальному посібнику (після теми побудови об'єктів). Отже, загальний формат операції приведення типів є таким:

(тип) вираз

У цьому записі елемент тип вказує на тип, до якого необхідно привести вираз. Наприклад, якщо виникає бажання, щоб вираз х/2 мав тип float, необхідно написати таке:

(float) х/2

Приведення типу розглядається як унарний оператор, і тому він має такий самий пріоритет, як і інші унарні оператори.

Іноді операція приведення типів виявляється дуже корисною. Наприклад, у наведеному нижче коді програми для керування циклом використовується деяка цілочисельна змінна, що входить до складу виразу, результат обчислення якого необхідно отримати з дробовою частиною.

Код програми 13.9. Демонстрація виконання операції приведення типів

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

int main() // Виводимо i та значення i/2 з дробовою частиною.

{

int i;

for(i=1; i<=100; ++i)

cout << i << "/ 2 дорівнює: " << (float) i / 2 << "\n";

getch(); return 0;

}

Без оператора приведення типу (float) виконалося б тільки цілочисельне ділення. Приведення типів у цьому випадку гарантує, що на екрані буде відображена і дробова частина результату.