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

3.5.2. Арифметичні оператори

У табл. 3.6 перераховано арифметичні оператори, дозволені для застосування у мові програмування C++. Дія операторів +; * і / збігається з дією аналогічних операторів у будь-якій іншій мові програмування (та і в алгебрі, якщо вже на те пішло). Їх можна застосовувати до даних будь-якого вбудованого числового типу. Після застосування оператора ділення (/) до цілого числа залишок буде відкинутий. Наприклад, результат цілочисельного ділення 10/3 буде дорівнювати 3.

Табл. 3.6. Арифметичні оператори

Оператор

Дія

+

Додавання

-

Віднімання, а також унарний мінус

*

Множення

/

Ділення|поділка,розподіл,поділ|

%

Ділення|поділка,розподіл,поділ| за модулем

--

Декремент

++

Інкремент

Залишок від ділення можна отримати за допомогою оператора ділення за модулем (%). Цей оператор працює практично так само, як у інших мовах програмування: повертає залишок від ділення без остачі. Наприклад, 10 % 3 дорівнює 1. Це означає, що у мові програмування C++ оператора "%" не можна застосовувати до типів з плинною крапкою (float або double). Ділення за модулем застосовано тільки до цілочисельних типів. Використання цього оператора продемонстровано у наведеному нижче коді програми.

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

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

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

int main()

{

int x, y;

x = 10;

y = 3;

cout << x/y; // Буде відображене число 3.

cout << "\n";

cout << x%y; /* Буде відображене число 1, тобто залишок

від ділення без остачі. */

сout << "\n";

х = 1;

y = 2;

cout << х/у << " " << х%y; // Будуть виведені числа 0 і 1.

getch(); return 0;

}

У останньому рядку результатів виконання цієї програми дійсно будуть виведені числа 0 і 1, оскільки при цілочисельному діленні 1/2 отримаємо 0 із залишком 1, тобто вираз 1%2 дає значення 1.

Унарний мінус, по суті, є множенням значення свого єдиного операнда на -1. Іншими словами, будь-яке числове значення, якому передує знак "-", змінює свій знак на протилежний.

3.5.3. Оператори інкремента і декремента

У мові програмування C++ є два оператори, яких немає в деяких інших мовах програмування. Це оператори інкремента (++) і декремента (--). Вони згадувалися в розд. 24.2, коли йшлося про настанову організації циклу for. Оператор інкремента виконує додавання до операнда число 1, а оператор декремента віднімає 1 від свого операнда. Це означає, що настанова

х = х + 1;

аналогічна такій настанові:

++x;

А настанова

x = x – 1;

аналогічна такій настанові:

--х;

Оператори інкремента і декремента можуть знаходитися як перед своїм операндом (префіксна форма), так і після нього (постфіксна форма). Наприклад, настанову

x = x + 1;

можна переписати у вигляді префіксної форми

++х; // Префіксна форма оператора інкремента.

або у вигляді постфіксної форми:

x++; // Постфіксна форма оператора інкремента.

У попередньому прикладі не мало значення, у якій формі було застосовано оператор інкремента: префіксній або постфіксній. Але, якщо оператор інкремента або декремента використовується як частина більшого виразу, то форма його застосування дуже важлива. Якщо такий оператор застосовується в префіксній формі, то мова програмування C++ спочатку виконає цю операцію, щоб операнд набув нового значення, яке потім буде використано іншою частиною виразу. Якщо ж оператор застосовується в постфіксній формі, то С# використовує у виразі його старе значення, а потім виконає операцію, в результаті якої операнд знайде нове значення. Для розуміння сказаного розглянемо такий фрагмент коду програми:

x = 10;

y = ++х;

У цьому випадку змінна y буде дорівнювати 11. Але, якщо у цьому коді префіксну форму запису замінити постфіксною, змінна y буде дорівнювати 10:

х = 10;

y = x++;

У обох випадках змінна х набуде значення 11. Різниця полягає тільки у тому, в який момент вона дорівнюватиме 11 (до або після присвоєння її значення змінній y). Для програміста надзвичайно важливо мати можливість керувати тривалістю виконання операції інкремента або декремента.

Більшість С++-компіляторів для операцій інкремента і декремента створюють ефективніший код порівняно з кодом, що генерується під час використання звичайного оператора додавання і віднімання одиниці. Тому професіонали вважають за краще використовувати (де це можливо) оператори інкремента і декремента.

Табл. 3.7. Порядок виконання дій арифметичними операторами

Пріоритет

Оператори

Найвищий

++ -- ­

- (унарний мінус)

* / %

Нижчий

+ –

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

3.5.4. Історія походження імені мови програмування C++

Тепер, коли нам стало зрозумілим значення оператора інкремента "++", можна зробити припущення щодо походження імені мови програмування C++. Як було зазначено в попередніх розділах, мова програмування C++ побудована на фундаменті мови С, значно удосконаленої, переважно з метою підтримки об'єктно-орієнтованого програмування. Таким чином, мова програмування C++ є інкрементним удосконаленням мови С, а результат додавання символів "++" (оператора інкремента) до імені С виявився цілком відповідним іменем для нової мови.

Б'єрн Страуструп спочатку назвав свою мову "С з класами" (C with Classes), але, за пропозицією Ріка Маскітті (Rick Mascitti), він пізніше змінив цю назву на мову програмування C++. І хоча успіх нової мови ще тільки передбачався, ухвалення нової лаконічної назви (мови програмування C++) сприяло успіху проекту.