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

9.4.6. Декілька присвоєнь "в одному"

Мова програмування C++ дає змогу застосувати дуже зручний метод одночасного присвоєння багатьом змінним одного і того ж значення. Йдеться про об'єднання відразу декількох присвоєнь в одній настанові. Наприклад, у процесі виконання цієї настанови змінним count, incr і index буде присвоєне число 10:

count = incr = index = 10;

Цей формат присвоєння декільком змінним загального значення можна часто натрапити в професійно написаних програмах.

9.4.7. Використання ключового слова sizeof

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

sizeof(type)

sizeof value

Оператор sizeof під час компілювання програми отримує розмір типу або значення.

Перша версія повертає розмір заданого типу даних, а друга – розмір заданого значення. Якщо виникає потреба дізнатися розмір певного типу даних (наприклад, int), помістіть назву цього типу в круглі дужки. Якщо ж Вас цікавить розмір області пам'яті, яке займає конкретне значення, то можна обійтися без круглих дужок, хоча при бажанні їх можна використовувати.

Щоб зрозуміти, як працює оператор sizeof, випробуйте таку коротку програму. Для багатьох 32-розрядних середовищ вона повинна відобразити значення 1, 4, 4 і 8.

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

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

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

int main()

{

char ch;

int izm;

cout << sizeof ch << "\n"; // розмір типу char

cout << sizeof izm << "\n"; // розмір типу int

cout << sizeof(float) << "\n"; // розмір типу float

cout << sizeof(double) << "\n"; // розмір типу double

getch(); return 0;

}

Як ми вже зазначали вище, оператор sizeof діє під час компілювання програми. Вся інформація, необхідна для обчислення розміру вказаної змінної або заданого типу даних, відома вже під час компілювання.

Оператора sizeof можна застосувати до будь-якого типу даних. Наприклад, у разі застосування його до масиву він повертає кількість байтів, які займає масив. Розглянемо такий фрагмент коду програми:

int tMas[4];

cout << sizeof tMas; // Буде виведене число 16.

Для 4-байтних значень типу int у процесі виконання цього фрагмента коду програми на екрані відобразиться число 16 (яке виходить в результаті множення 4 байтів на 4 елементи масиву).

Оператор sizeof в основному використовується під час написання коду програми, який залежить від розміру С++-типів даних. Пам'ятайте: оскільки розміри типів даних у мові програмування C++ визначаються конкретною реалізацією, не варто покладатися на розміри типів, визначених в реалізації, у якій Ви працюєте в цей момент.

Рис. 9.1. Використання пам'яті у мові програмування C++

9.5. С++-система динамічного розподілу пам'яті

Для С++-програми існує два основні способи зберігання інформації в основній пам'яті комп'ютера. Перший полягає у використанні змінних. Область пам'яті, що надається змінним, закріплюється за ними під час компілювання і не може бути змінена у процесі виконання програми. Другий спосіб полягає у використанні С++-системи динамічного розподілу пам'яті. У цьому випадку пам'ять для даних виділяється в міру потреби з розділу вільної пам'яті, який розташований між Вашою програмою (і її постійною областю зберігання) та стеком. Цей розділ на­зи­вається "купою" (heap). Розташування програми в пам'яті схематично показано на рис. 9.1.

Система динамічного розподілу пам'яті – це засіб отримання програмою деякої області пам'яті під час її виконання.

Динамічне виділення пам'яті – це отримання програмою пам'яті під час її виконання. Іншими словами, завдяки цій системі програма може створювати змінні у процесі виконання, причому в потрібній (залежно від ситуації) кількості. Ця система динамічного розподілу пам'яті особливо цінна для таких структур даних, як зв'язні списки і двійкові дерева, які змінюють свій розмір у міру їх використання. Динамічне виділення пам'яті для тих або інших потреб – важлива складова майже всіх реальних програм.

Щоб задовольнити запит на динамічне виділення пам'яті, використовують так звану "купу". Неважко припустити, що в деяких надзвичайних ситуаціях вільна пам'ять "купи" може вичерпатися. Отже, незважаючи на те, що динамічний розподіл пам'яті (порівняно з фіксованим) забезпечує велику гнучкість, але і у цьому випадку він має свої межі використання.