Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мищишин електронка.doc
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
1.04 Mб
Скачать

Void main(void)

{

char "pointer = new char[100];

strcpy(pointer, "Таємниці моєї компанії");

delete pointer;

}

При виконанні програма виділяє пам'ять для рядкового масиву за допомогою оператора new. Потім вона копіює секрети компанії в цей рядок. Надалі програма використовує перезавантажений оператор delete для звільнення пам'яті. Всередині функції delete наведений нижче оператор присвоює значення змінної pointer вказівнику на символьний рядок:

char *data = (char *) pointer;

Символи (char *), які називаються оператором приведення типів, призначені тільки для того, щоб повідомити компілятор C++, що функція знає, що вона присвоює вказівник типу void (див. вище параметри функції) вказівнику типу char. Якщо ви опустите оператор приведення типів, програма не відкомпілюється. Потім функція копіює нулі в 100 байт буфера і звільняє пам'ять, використовуючи для цього функцію бібліотеки етапу виконання free. Дуже важливо відзначити, що ця функція (оператор delete) працює тільки з ділянкою пам'яті розміром 100 байт. Оскільки ця програма виділяє пам'ять тільки один раз, вона працює коректно. Якщо ви зміните програму так, щоб виділялося тільки десять байт пам'яті і не зробите подібних змін в цій функції, то вона перезапише 90 байт пам'яті, які ваша програма, можливо, використовувала для інших цілей, що призведе до помилки. Проте, використовуючи функції бібліотеки етапу виконання, ваші програми можуть одержати більше інформації про розмір ділянки пам'яті, на яку вказує певний вказівник.

Наступна програма NEW_OVER.CPP перезавантажує оператор C++ new. В цьому випадку перезавантажена функція розміщує символьний рядок "Вчимося програмувати мовою C++!" в початок пам'яті, що виділяється:

#include <alloc.h>

#include <string.h>

static void *operator new(size_t size)

{

char *pointer;

pointer = (char *) malloc(size);

if (size > strlen( "Вчимося програмувати мовою C++!"))

strcpy(pointer, "Вчимося програмувати мовою С++!");

return(pointer);

}

Void main(void)

{

char *str = new char[100];

cout << str << endl;

}

Як бачите, функція new використовує для виділення пам'яті функцію malloc бібліотеки етапу виконання. Якщо розмір пам'яті, що виділяється, достатній для зберігання рядка "Вчимося програмувати мовою C++!", дана функція використовує функцію strcpy бібліотеки етапу виконання для копіювання рядка в ділянку пам'яті.

33.Додаткові можливості cin і cout

До цього в програмах використовували вихідний потік cout для виведення інформації на екран дисплея. Аналогічно вхідний потік cin – для введення інформації з клавіатури. Виявляється, cin і cout є класовими об'єктами, що визначаються і створюються за допомогою файлу iostream.h. Об'єкти cin і cout підтримують різні оператори і операції.

Файл iostream.H

Починаючи з першої, кожна написана вами на C++ програма включала файл iostream.h, що розміщувався в заголовку. Цей файл містить визначення, які дозволяють вашим програмам використовувати cout для виконання виведення і cin для виконання введення. Більш точно, цей файл визначає класи istream і ostream (вхідний потік і вихідний потік), а cin і cout є змінними (об'єктами) цих класів. Виберіть час, щоб надрукувати файл iostream. Він знаходиться в підкаталозі INCLUDE. Визначення в цьому файлі достатньо складні. Проте читаючи його ви знайдете, що більшість визначень є просто визначеннями класів і констант. Усередині файлу ви знайдете оголошення змінних cin і cout.