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

8.2.4. Створення обмеженого (безпечного) масиву

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

Код програми 8.7. Демонстрація організації безпечного масиву

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

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

int &put(int i); // Поміщаємо значення в масив.

int get(int i); // Зчитуємо значення з масиву.

int vals[10];

int error = -1;

int main()

{

put(0) = 10; // Поміщаємо значення в масив.

put(1) = 20;

put(9) = 30;

cout << get(0) << "\n";

cout << get(1) << "\n";

cout << get(9) << "\n";

// А зараз спеціально генеруємо помилку.

put(12) = 1; // Індекс за межами масиву.

getch(); return 0;

}

// Функція занесення значення в масив.

int &put(int i)

{

if(i>=0 && i<10)

return vals[i]; // Повертаємо посилання на i-й елемент.

else {

cout << "Помилка порушення меж масиву!\n";

return error; // Повертаємо посилання на error.

}

}

// Функція зчитування значення з масиву.

int get(int i)

{

if(i>=0 && i<10)

return vals[i]; // Повертаємо значення i-го елемента,

else {

cout << "Помилка порушення меж масиву!\n";

return error; // Повертаємо значення змінної error.

}

}

Результат, отриманий у процесі виконання цієї програми, має такий вигляд:

10 20 30 Помилка порушення меж масиву!

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

Незважаючи те, що метод реалізації безпечного масиву, який було представлено в попередній програмі, цілком коректний, проте можливий вдаліший варіант. Як буде показано далі у цьому навчальному посібнику (під час перегляду теми перевантаження операторів (див. розд. 14)), програміст може створити власний безпечний масив, під час роботи з яким достатньо використовувати стандартну систему позначень.