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

9.4.2. Створення нових імен для наявних типів даних

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

typedef тип нове_ім'я;

У цьому записі елемент тип означає будь-який допустимий тип даних, а елемент нове_ім'янове ім'я для цього типу. При цьому зауважте: нове ім'я визначається Вами як доповнення до наявного імені типу, а не для його заміни.

Ключове слово typedef дає змогу створити нове ім'я для наявного типу даних.

Наприклад, за допомогою такої настанови можна створити нове ім'я для типу float:

typedef float balance;

Ця настанова є розпорядженням компіляторові розпізнавати ідентифікатор balance як ще одне ім'я для типу float. Після цієї настанови можна створювати float-змінні з використанням імені balance:

balance over_due;

У цьому записі оголошена змінна з плинною крапкою over_due типу balance, який є стандартним типом float, але таким, що має іншу назву.

9.4.3. Оператор "знак запитання"

Одним з найчудовіших операторів C++ є оператор "?", який можна використовувати як заміну if-else-настанов, що вживаються в такому загальному форматі:

if(умова)

змінна = вираз1;

else

змінна = вираз2;

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

Оператор "?" називається тернарним|, оскільки він працює з трьома операндами. Ось його загальний формат запису:

Вираз1 ? Вираз2 : Вираз3;

Всі елементи тут є виразами. Звернемо Вашу увагу на використання і розташування двокрапки.

Значення ?-виразу визначається таким чином. Обчислюється Вираз1. Якщо він виявляється істинним, то обчислюється Вираз2, і результат його обчислення стає значенням всього ?-виразу. Якщо результат обчислення елемента Вираз1 виявляється помилковим, то значення всього ?-виразу стає результатом обчислення елемента ВиразЗ. Розглянемо такий приклад:

while(something) {

х = count > 0 ? 0 : 1;

//...

}

У цьому записі змінній х присвоюватиметься значення 0 доти, доки значення змінної count не стане меншим або дорівнюватиме нулю. Аналогічний програмний код (але з використанням if-else-настанові) виглядав би так:

while(something) {

if(count > 0) х = 0;

else x = 1;

//...

}

А ось ще один приклад практичного застосування оператора "?". Наведений нижче код програми ділить два числа, але не допускає ділення на нуль.

Код програми 9.12. Демонстрація механізму використання оператора "?" для запобігання ділення на нуль

#include <vcl>

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

#include <conio> // Для консольного режиму роботи

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

int div_zero();

int main()

{

int izm, jzm, result;

cout << "Введіть ділене і дільник: ";

cin >> izm >> jzm;

// Ця настанова не допустить виникнення помилки ділення на нуль.

result = jzm ? izm/jzm : div_zero();

cout << "Результат: " << result;

getch(); return 0;

}

int div_zero() {

cout << "Не можна ділити на нуль.\n";

getch(); return 0;

}

У цій програмі, якщо значення змінної jzm не дорівнює нулю, то виконується ділення значення змінної izm на значення змінної jzm, а результат присвоюється змінній result. Інакше викликається обробник помилки ділення на нуль div_zero(), і змінній result присвоюється нульове значення.