- •Міністерство надзвичайних ситуацій України Львівський державний університет безпеки життєдіяльності Юрій грицюк, Тарас рак
- •Навчальний посібник
- •Потреба використання об'єктно-орієнтованого програмування
- •Поняття про об’єктно-орієнтований підхід до розроблення складних програм
- •Основні компоненти об’єктно-орієнтованої мови програмування
- •Поняття про універсальну мову моделювання
- •Базові поняття класу
- •Код програми 2.1. Демонстрація механізму оголошення класу та його застосування
- •Поняття про конструктори і деструктори
- •Особливості реалізації механізму доступу до членів класу
- •Класи і структури - споріднені типи
- •Об'єднання та класи - споріднені типи
- •Поняття про вбудовані функції
- •Inline int myClass::Put() return c;
- •Особливості організації масивів об'єктів
- •Особливості використання покажчиків на об'єкти
- •Поняття про функції-"друзі" класу
- •Код програми 3.1. Демонстрація механізму використання "дружньої" функції для доступу до закритих членів класу
- •Код програми 3.2. Демонстрація механізму використання "дружньої" функції для перевірки статусу кожного об'єкта
- •Void Run(); //Таймер відліку часу
- •Void timerClass::Run()
- •Int mainO
- •Особливості механізму динамічної ініціалізації конструктора
- •Int s; public:
- •Void Run(); //Таймер відліку часу
- •Void timerClass::Run()
- •Int mainO
- •Особливості механізму присвоєння об'єктів
- •Int а, ь; public:
- •Int mainO
- •Особливості механізму передачі об'єктів функціям
- •Void Fun(myClassobj)
- •Int mainO
- •Конструктори, деструктори і передача об'єктів
- •Void Get(myClass obj)
- •Int mainO
- •Потенційні проблеми, які виникають при передачі об'єктів
- •Int *р; public:
- •Void Get(myClass &obj) // Передача об'єкта за посиланням
- •Int mainO
- •Особливості механізму повернення об'єктів функціями
- •Void Set(char*s) {strcpy(str, s);}
- •Void Show() {cout «"Рядок:" « str« endl;}
- •Int mainO
- •Int mainO
- •Механізми створення та використання конструктора копії
- •Використання конструктора копії для ініціалізації одного об'єкта іншим
- •Int mainO
- •Механізм використання конструктора копії для передачі об'єкта функції
- •Int mainO
- •Механізм використання конструктора копії при поверненні функцією об'єкта
- •Int mainO
- •3.7.4. Конструктори копії та їх альтернативи
- •Поняття про ключове слово this
- •Void Fun() {...};
- •Int mainO
- •Механізми перевизначення операторів з використанням функцій-членів класу
- •Int х, у, z; //Тривимірні координати
- •Int mainO
- •Intх,у,z; //Тривимірні координати
- •Void Show(char*s);
- •Int mainO
- •Int х, у, z; //Тривимірні координати
- •Int mainO
- •Особливості реалізації механізму перевизначення операторів
- •Механізми иеревизначення операторів з використанням функцій-не членів класу
- •Використання функцій-"друзів" класу для перевизначення бінарних операторів
- •Void Show(char*s);
- •Int mainO
- •Int mainO
- •Використання функцій-"друзів" класу для перевизначення унарних операторів
- •Int mainO
- •Особливості реалізації оператора присвоєння
- •Int mainO
- •Int mainO
- •Механізми перевизначення оператора індексації елементів масиву "[]"
- •Int mainO
- •Int aMas[size]; public:
- •Int mainO
- •Int aMas[size]; public:
- •Int mainO
- •Механізми перевизначення оператора виклику функцій "()"
- •Int mainO
- •Механізми перевизначення рядкових операторів
- •Конкатенація та присвоєння класу рядків з рядками класу
- •Void Show(char*s) {cout« s « string « endl;}
- •Конкатенація та присвоєння класу рядків з рядками, що закінчуються нульовим символом
- •Void Show(char*s) {cout« s « string « endl;}
- •Void Show(char*s) {cout« s « string « endl;}
- •Int mainO
- •Поняття про успадкування в класах
- •Int kolesa; // Кількість коліс int pasagyr; // Кількість пасажирів public:
- •Int mistkist; // Вантажомісткість у м куб. Public:
- •Int kolesa; // Кількість коліс int pasagyr; // Кількість пасажирів public:
- •Int mainO
- •Використання специфікатора доступу protected для надання членам класу статусу захищеності
- •Int mainO
- •Int mainO
- •Int mainO
- •Protected-членом класу derived, що робить його недоступним за його межами. */
- •Int d; // Захищений public:
- •Void showX() {cout« х « endl;}
- •Void showY() {cout« у « endl;}
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Успадкування віртуальних функцій
- •Void Show() {cout« Суг("Другий похідний клас.") « endl;}
- •Virtual void Show() {cout« Суг("Базовий клас.") « endl;}
- •Void Show() {cout« Суг("Перший похідний клас. ")« endl;}
- •Int mainO
- •Virtual void ShowO {cout« Суг("Базовий клас.") « endl;}
- •Void Show() {cout« Суг("Перший похідний клас. ")« endl;}
- •Int mainO
- •Void Show()
- •Void Show()
- •Int mainO
- •Void Show()
- •Void Show()
- •Int mainO
- •Void swapAb(aType &а, аТуре &b)
- •Int mainO
- •Приклад створення узагальненого класу для організації безпечного масиву
- •Int mainO
- •Використання в узагальнених класах аргументів, що не є узагальненими типами
- •Використання в шаблонних класах аргументів за замовчуванням
- •Int mainO
- •Механізм реалізації безпосередньо заданої спеціалізації класів
- •Int mainO
- •Основні особливості оброблення виняткових ситуацій
- •Системні засоби оброблення винятків
- •Xtest(1);
- •Xtest(2);
- •Перехоплення винятків класового типу
- •Використання декількох catch-наетанов
- •Варіанти оброблення винятків
- •Перехоплення всіх винятків
- •Накладання обмежень на тип винятків, які генеруються функціями
- •Int mainO
- •Xhandler(o); // Спробуйте також передати функції XhandlerO аргументи 1 і 2.
- •Void Xhandler(int test) throw 0
- •Повторне генерування винятку
- •Int mainO
- •Int mainO
- •Механізми перевизначення операторів new і delete
- •Void *р;
- •Void *p;
- •Int mainO
- •Класи потоків
- •Особливості механізмів перевизначення операторів введення-виведення даних
- •Створення перевюначених операторів виведення даних
- •Int mainO
- •Використання функцій-"друзів" класу для перевюначення операторів виведення даних
- •Int х, у, z; //Тривимірні координати (тепер це private-члени) public:
- •Int mainO
- •Створення перевюначених операторів введення даних
- •Istream &operator»(istream &stream, kooClass &obj)
- •Cout«"Введіть координати X, у і z:
- •Stream » obj.X » obj.Y » obj.Z;
- •Istream &operator»(istream &stream, objectType &obj)
- •// Код операторної функції введення даних
- •Class kooClass {// Оголошення класового типу int х, у, z; // Тривимірні координати
- •Istream &operator»(istream &stream, kooClass &obj)
- •Int mainO
- •Void unsetf(fmtflags flags),
- •Void showflags(ios::fmtflags f); // Відображення поточного стану опцій
- •Int mainO
- •Ios::fmtflags f; // Оголошення параметру для поточного стану опцій
- •Int mainO
- •Створення власних маніиуляторних функцій
- •Організація файлового введення-виведення даних
- •Відкриття та закриття файлу
- •Зчитування та запис текстових файлів
- •Ifstream in(argv[1], ios::in | ios::binary); if(!in){
- •In.CloseO; getchO; return 0;
- •Int mainO
- •Зчитування та записування у файл блоків даних
- •Int mainO
- •Ifstream inftest", ios::in | ios::binary); if(!in){
- •Використання функції eof() для виявлення кінця файлу
- •If(!in.Eof()) cout« ch;
- •In.CloseO; getchO; return 0;
- •Int main(int arge, char *argv[])
- •Ifstream f1(argv[1], ios::in | ios::binary); if(!f1) {
- •Ifstream f2(argv[2], ios::in | ios::binary);
- •Int main(int arge, char *argv[])
- •Ifstream in(argv[1], ios::in | ios::binary); if(!in){
- •In.Seekg(atoi(argv[2]), ios::beg); while(in.Get(ch)) cout« ch; getchO; return 0;
- •Int х, у, z; // Тривимірні координати; вони тепер закриті public:
- •Int mainO
- •Virtual void Fun() {}; // Робимо клас Base поліморфним
- •Int mainO
- •Virtual void FunO {cout«"у класі Base"« endl;}
- •Int mainO
- •Virtual void FunO {}
- •Void derivedOnlyO {cout«"Це об'єкт класу Derived"« endl;}
- •Int mainO
- •Void Fun(const int *р)
- •Int mainO
- •Namespace ns { int d;
- •Застосування настанови using
- •Int Comp(const void *а, const void *b);
- •Int mainO
- •Int Comp(const void *a, const void *b)
- •Int mainO
- •Int Fun10 const; // const-функція-член
- •Int PutO const; return c; // Все гаразд
- •Int mainO
- •0Bj.Set(1900); cout « Obj.PutO;
- •Void setJ(int х) const // Наступна функція не відкомпілюється.
- •Int а; public:
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int myClass::*dp; // Покажчик на int-члена класу void (myClass::*fp)(int X); // Покажчик на функцію-члена
- •Int mainO
- •Механізми роботи з векторами
- •Int mainO
- •1 234 5 678 9 10 11 12 13141516 17 1819 Вміст подвоєно:
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Int mainO
- •Символи н
- •Символів представляють голосні звуки.
- •Int mainO
- •Int mainO
- •Int mainO
- •Void getaLine(string& inStr); // Отримання рядка тексту char getaCharO; //Отримання символу
- •Int aptNumber; // Номер кімнати мешканця
- •Void DisplayO; // Виведення переліку мешканців
- •Int aptNo; float rent[12]; public:
- •Void setRent(int, float); // Запис плати за місяць
- •Void insertRent(int, int, float); void DisplayO;
- •Int month, day; string category, payee; float amount; expense() {}
- •Int mainO
- •Void rentRecord::insertRent(int aptNo, int month, float amount)
- •SetPtrsRr.Insert(ptrRow); // Занести рядок вектор
- •If( setPtrsRr.Empty())
- •Else // Інакше
- •Int month, day; string category, payee; float amount;
- •«" 'Є' для запису витрат:";
- •Навчальний посібник
Використання функції eof() для виявлення кінця файлу
Виявити кінець файлу можна за допомогою функції-члена класу eof(), яка має такий прототип: bool eof();
Ця функція повертає значення true у випадку досягнення кінця файлу; інакше вона повертає значення false.
У наведеному нижче коді програми для виведення на екран вмісту файлу використовується функція eofO-
Код програми 9.16. Демонстрація механізму виявлення кінця файлу за допомогою функції eof()
#include <iostream> // Для потокового введення-виведення
#include <fstream> // Для роботи з файлами
using namespace std; // Використання стандартного простору імен
int main(int arge, char *argv[])
{
char ch; if(argc != 2) {
cout«"Застосування: ім'я_програми <ім'я_файлу>" « endl; return 1;
}
ifstream in(argv[1], ios::in | ios::binary);
if(ün) {
cout«"Не вдається відкрити файл" « endl; return 1;
}
while(!in.eof()) {// Використання функції eof() in.get(ch);
If(!in.Eof()) cout« ch;
}
In.CloseO; getchO; return 0;
}
Застосування C++ файлової системи для порівняння файлів
Наведений нижче код програми ілюструє потужність і простоту застосування у мові програмування C++ файлової системи. Тут порівнюються два файли за допомогою функцій двійкового введення-виведення readO, eof() і gcountO- Програма спочатку відкриває порівнювані файли для виконання двійкових операцій (щоб не допустити перетворення символів). Потім з кожного файлу по черзі зчитуються блоки інформації у відповідні буфери і порівнюється їхній вміст. Оскільки об'єм зчитаних даних може бути меншим за розмір буфера, то у програмі використовується функція gcountO, яка точно визначає кількість зчитаних у буфер байтів. Неважко переконатися у тому, що при використанні файлових С++-функцій для виконання цих операцій була потрібна зовсім невелика за розміром програма.
Код програми 9.17. Демонстрація механізму застосування файлової системи для порівняння файлів #include <iostream> // Для потокового введення-виведення
#include <fstream> // Для роботи з файлами
using namespace std; // Використання стандартного простору імен
Int main(int arge, char *argv[])
{
register int i;
unsigned char buf1 [1024], buf2[1024]; if(argc !=3) {
cout«"Застосування: ім'я_програми <ім'я_файла1>" «"<ім'я_файла2>"« endl; return 1;
}
Ifstream f1(argv[1], ios::in | ios::binary); if(!f1) {
cout«"He вдається відкрити перший файл" « endl; return 1;
}
Ifstream f2(argv[2], ios::in | ios::binary);
if(!f2){
cout«"Не вдається відкрити другий файл" « endl; return 1;
}
cout«"Порівняння файлів" « endl; do {
f1 ,read((char *) buf1, sizeof buf1); f2.read((char*) buf2, sizeof buf2); if(f1 gcountO != f2.gcount0) {
cout«"Файли мають різні розміри"« endl; fi cioseO; f2.close0; getchO; return 0;
}
// Порівняння вмісту буферів. for(i=0; i<f1 ,gcount(); І++) if(buf1[i]!=buf2[i]){
cout«"Файли різні"« endl; f1 .cioseO; f2.close0; getchO; return 0;
}
} while(!f1 .eofO && !f2.eof0);
cout«"Файли однакові" « endl;
f1.close(); f2.close(); getchO; return 0;
}
Спробуйте провести такий експеримент. Розмір буфера у цьому коді програми жорстко встановлено таким, що дорівнює 1024. Як вправу замініть це значення за допомогою const-змінної та випробуйте інші розміри буферів. Визначте оптимальний розмір буфера для свого операційного середовища.
Використання інших функцій для двійкового введення-виведення даних
Крім наведеного вище формату використання функції getO існують і інші її перевизначені версії. Наведемо прототипи для трьох з них, які використовуються найчастіше:
istream &get(char*buf, streamsize пит);
istream &get(char*buf, streamsize пит, char delim);
int getO;
Перша версія функції getO дає змогу зчитувати символи і заносити їх у масив, який задається параметром buf, доти, доки не буде зчитано пит-1 символів, або не трапиться символ нового рядка, або не буде досягнуто кінець файлу. Після завершення роботи функції get() масив, який адресується покажчиком buf, матиме завершальний нуль-символ. Символ нового рядка, якщо такий виявиться у вхідному потоці, не вилучається. Він залишається там доти, доки не виконається наступна операція введення-виведення.
Друга версія функції get() призначена для зчитування символів і занесення їх у масив, який адресується покажчиком buf, доти, доки не буде зчитано пит-1 символів, або не виявиться символ, який задається параметром delim, або не буде досягнуто кінець файлу. Після завершення роботи функції get() масив, який адресується покажчиком buf, матиме завершальний нуль-символ. Символ-роздільник (заданий параметром delim) , якщо такий виявиться у вхідному потоці, не вилучається. Він залишається там доти, доки не виконається наступна операція вве- дення-виведення.
Третя перевизначена версія функції get() повертає з потоку наступний символ. Він міститься в молодшому байті значення, що повертається функцією. Отже, значення, що повертається функцією get(), можна присвоїти змінній типу char. Досягши кінця файлу, ця функція повертає значення EOF, яке визначено у заголовку <iostream>.
Функцію get() корисно використовувати для зчитування рядків, що містять пропуски. Як уже зазначалося вище, якщо для зчитування рядка використовують оператор "»", то процес введення даних зупиняється внаслідок виявлення першого ж пропускного символу. Це робить оператор "»" не придатним для зчитування рядків, що містять пропуски. Але цю проблему, як це показано в такому коді програми, можна обійти за допомогою функції get (buf, пит).
Код програми 9.18. Демонстрація механізму використання функції get() для зчитування рядків, що містять пропуски #include <iostream> // Для потокового введення-виведення
#include <fstream> // Для роботи з файлами
using namespace std; // Використання стандартного простору імен
int mainO
{
char str[80];
cout«"Введіть ім'я: cin.get(str, 79);
cout« str« endl; getchO; return 0;
}
У цьому коді програми як символ-роздільник під час зчитування рядка за допомогою функції get() використовується символ нового рядка. Це робить поведінку функції get() багато в чому схожою з поведінкою стандартної функції getsO- Проте перевага функції get() полягає у тому, що вона дає змогу запобігти можливому виходу за межі масиву, який приймає символи, які вводяться користувачем, оскільки у програмі оголошено максимальну кількість зчитаних символів. Це робить функцію get() набагато безпечнішою за функцію gets().
Розглянемо ще одну функцію, яка дає змогу вводити дані. Йдеться про функцію getlineO, яка є членом кожного потокового класу, призначеного для введення інформації. Ось як виглядають прототипи версій цієї функції: istream &getline(char *buf, streamsize num);
istream &getline(char *buf, streamsize num, char delim);
При використанні першої версії функції де(ІІпе()символи зчитуються і заносяться у масив, який адресується покажчиком buf, доти, доки не буде зчитано пит-1 символів, або не трапиться символ нового рядка, або не буде досягнуто кінець файлу. Після завершення роботи функції getline() масив, який адресується покажчиком buf, матиме завершальний нуль-символ. Символ нового рядка, якщо такий виявиться у вхідному потоці, при цьому вилучається, але не заноситься у масив buf.
Друга версія функції де(ІІпе()призначена для зчитування символів і занесення їх у масив, який адресується покажчиком buf, доти, доки не буде зчитано пит-1 символів, або не виявиться символ, який задається параметром delim, або не буде досягнуто кінець файлу. Після завершення роботи функції getline() масив, який адресується покажчиком buf, матиме завершальний нуль-символ. Символ-роз- дільник (який задаються параметром delim) , якщо такий виявиться у вхідному потоці, вилучається, але не заноситься у масив buf.
Як бачите, ці дві версії функцій getlineO практично ідентичні версіям get (buf, пит) і get (buf, пит, delim) функції get(). Обидві зчитують символи з вхідного потоку і заносять їх у масив, який адресується покажчиком buf, доти, доки не буде зчитано питЛ символів, або не виявиться символ, який задається параметром delim. Відмінність між функціями get() і getlineO полягає у тому, що функція getlineO зчитує і видаляє символ-роздільник з вхідного потоку, а функція getO цього не робить.
Наступний символ з вхідного потоку можна отримати і не видаляти його з потоку за допомогою функції реек(). Її прототип має такий вигляд: int peek();
Функція peekO повертає наступний символ потоку, або значення EOF, якщо досягнуто кінець файлу. Зчитаний символ повертається в молодшому байті значення, що повертається функцією. Тому значення, що повертається функцією ре- екО, можна присвоїти змінній типу char.
Останній символ, що зчитується з потоку, можна повернути у потік, використовуючи функцію putbackO- Її прототип має такий вигляд: istream &putback(char ch)\
У цьому записі параметр ch містить символ, що зчитується з потоку останнім.
Під час виведення даних за допомогою функції flushOHe відбувається негайного їх запису на фізичний пристрій, що у даний момент пов'язаний з потоком. Інформація, яка підлягає виведенню, спочатку нагромаджується у внутрішньому буфері доти, доки він цілком не заповниться. І тільки тоді його вміст переписується на диск. Проте існує можливість негайного перезапису на диск даних, які зберігається в буфері функції flushO, не чекаючи його повного заповнення. Цей засіб полягає у виклику функції flush(). Її прототип має такий вигляд: ostream &flushO;
До викликів функції АизИО необхідно вдаватися у випадку, якщо програма призначена для роботи в несприятливих середовищах (для яких характерні часті відключення, наприклад, електрики).
9.5.8. Перевірка статусу введення-виведення даних
С++-система введення-виведення підтримує статусну інформацію про результати виконання кожної операції введення-виведення даних. Поточний статус потоку введення-виведення описується в об'єкті типу іоєїаіе, який є перерахунком
Ім'я |
Значення |
ios::goodbit |
Помилок немає |
ios: :eofbit |
1 внаслідок виявлення кінця файлу; 0 - в іншому випадку |
ios: :failbit |
1 під час виникнення поправної помилки введення-виведення; 0 - в іншому випадку |
ios: :badbit |
1 під час виникнення непоправної помилки введення-виведення; 0 - в іншому випадку |
Статусну інформацію про результат виконання операцій введення-виведення даних можна отримувати двома способами. По-перше, можна викликати функцію rdstate(), яка є членом класу ios. Вона має такий прототип: iostate rdstate();
Функція rdstate() повертає поточний статус опцій помилок. Неважко здогадатися, що, судячи з наведеного вище переліку опцій, функція rdstate() поверне значення good bit за відсутності будь-яких помилок. У іншому випадку вона повертає відповідний код помилки.
По-друге, про наявність помилки можна дізнатися за допомогою однієї або декількох наступних функцій-членів класу ios:
функція bool bad(); повертає значення ІСТИНА, якщо внаслідок виконання операції введення-виведення даних було встановлено опцію badbit;
функцію bool eof(); розглянуто вище;
функція bool failO; повертає значення ІСТИНА, якщо внаслідок виконання операції введення-виведення даних було встановлено опцію failbit;
функція bool good(); повертає значення ІСТИНА, якщо у процесі виконання операції введення-виведення даних помилок не відбулося.
У інших випадках ці функції повертають значення ФАЛЬШ.
Якщо у процесі виконання операції введення-виведення даних Ви допустилися помилки, то, можливо, перш ніж продовжувати виконання програми, є сенс скинути опції помилок. Для цього використовують функцію clearO (член класу ios), прототип якої має такий вигляд: void clear(iostate Hags = ios::goodbit);
Якщо параметр flags дорівнює значенню goodbit(BOHO встановлюється за замовчуванням), то всі опції помилок очищаються. Інакше опції встановлюються відповідно до заданого Вами значення.
Перш ніж переходити до наступного підрозділу, варто випробувати функції, які повідомляють дані про поточний стан опцій помилок, внісши у попередні приклади кодів програм опції перевірки помилок.
Використання файлів довільного доступу
Дотепер використовувалися файли, доступ до вмісту яких було організовано строго послідовно, байт за байтом. Але у мові програмування C++ також можна отримувати доступ до файла у довільному порядку.
Функції довільного доступу
Для довільного доступу до даних файла необхідно використовувати функції seekg() і seekpO- їх прототипи мають такий вигляд:
istream &seekg(off_type offset, seekdir origin)',
ostream &seekp(off_type offset, seekdir origin)',
Використовуваний тут цілочисельний тип off_type (його визначено у класі ios) дає змогу зберігати найбільше допустиме значення, яке може мати параметр offset. Тип seekdir визначено як перерахунок, який має такі значення.
Значення |
Опис |
ios::beg |
Початок файлу |
ios::cur |
Поточна позиція файлу |
ios::end |
Кінець файлу |
У С++-системі введення-виведення передбачено можливість керування двома покажчиками, пов'язаними з файлом. Ці так звані get- і put-покажчики визначають, у якому місці файлу повинна виконатися наступна операція введення та виведення відповідно. При кожному виконанні операції введення або виведення відповідний покажчик автоматично переміщається у вказану позицію. Використовуючи функції seekgO і seekpO, можна отримувати доступ до файла у довільному порядку.
Функція seekg() переміщає поточний get-покажчик відповідного файлу на offset байт відносно позицій, які задаються параметром origin.
Функція seekp() переміщає поточний put-покажчик відповідного файлу на offset байт відносно позицій, які задаються параметром origin.
Існують перевизначені версії функцій seekgO і seekpO, які переміщають файлові покажчики у позиції файлу, що задаються значеннями, які повертаються функціями tellg() і (еІІрОвідповідно. Ось як виглядають їх прототипи: istream &seekg(pos_type position)', ostream &seekp(pos_type position)',
Приклади використання довільного доступу до вмісту файлу
У наведеному нижче коді програми продемонстровано механізм використання функції seekp(). Вона дає змогу задати ім'я файлу у командному рядку, а за ним
конкретний байт, який потрібно у ньому змінити. Програма потім записує у вказану позицію символ "X". Зверніть увагу на те, що оброблюваний файл повинен бути відкритим для виконання операцій зчитування-запису.
Код програми 9.19. Демонстрація механізму використання функції seekpO для довільного доступу до вмісту файлу #include <iostream> // Для потокового введення-виведення
#include <fstream> // Для роботи з файлами
#include <cstdlifc» // Для використання бібліотечних функцій
using namespace std; // Використання стандартного простору імен
int main(int arge, char 1argv[])
{
if(argc !=3) {
cout«"Застосування: ім'я_програми" «"<ім'я_файлу> <байт>" « endl; return 1;
}
fstream out(argv[1], ios::in | ios::out | ios::binary); if(!out) {
cout«"He вдається відкрити файл" « endl; return 1;
}
out.seekp(atoi(argv[2]), ios::beg);
out.put('X'); out.closeO; getchO; return 0;
}
У наведеному нижче коді програми показано приклад використання функції seekgO- Вона відображає вміст файлу, починаючи з позиції, що задається у командному рядку.
Код програми 9.20. Демонстрація механізму відображення вмісту файлу із заданої позиції #include <iostream> // Для потокового введення-виведення
#include <fstream> // Для роботи з файлами
#include <cstdlib> // Для використання бібліотечних функцій
using namespace std; // Використання стандартного простору імен
