Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / ООП (16. Робота з потоками).doc
Скачиваний:
23
Добавлен:
30.05.2020
Размер:
240.13 Кб
Скачать

Питання і відповіді

  1. Як визначити, коли використовувати операторів введення і виводу, а коли інші функції-члени класів потоку?

В цілому оператори введення і виводу простіше у використанні, тому в більшості випадків краще звертатися саме до них. У деяких інших випадках, коли ці оператори не справляються зі своєю роботою (наприклад, при введенні рядка із слів, розділених пропусками), можна вдатися до використання інших функцій.

  1. Яка відмінність між cerr і clog?

Об'єкт cerr не буферизируется? Іншими словами, всі дані, що поступають в cerr, негайно виводяться на екран. Це відмінно личить для виведення помилок на екран, проте дорого обійдеться при записі реєстраційної інформації на диск. Об'єкт clog буферизирует свій вивід, тому в останньому випадку може бути ефективнішим.

  1. Навіщо створювати потоки, якщо відмінно працює функція printf()? Функція printf() не контролює строго типів даних, що виводяться, чого вимагають стандарти C++. Крім того, ця функція не поддреживает роботу з класами.

  2. Коли слід застосовувати метод putback()?

Цей метод вельми ефективний в тих випадках, коли для визначення відповідності введеного символу встановленим обмеженням використовується одна операція прочитування, а для запису символу в буфер використовуються деякі інші операцій. Найчастіше це знаходить вживання при аналізі синтаксичних конструкцій файлу, наприклад при створенні компіляторів.

  1. Коли слід використовувати функцію ignore()?

Найчастіше вона використовується після функції get(). Оскільки остання залишає в буфері символ розриву рядка, інколи за викликом функції get() слідує виклик ignore(1, '\n');. Ця функція, як і putback(), використовується, як правило, при синтаксичному розборі файлів.

  1. Мої друзі використовують в своїх програмах на C++ функцію printf(). Чи можна і мені її використовувати?

Звичайно ж, можна. Проте, хоча ця функція простіша у використанні, ви втратите строгий контроль за типами файлів і утрудните роботу з об'єктами класів.

Контрольні питання

1. Що таке оператор введення і як він працює?

2. Що таке оператор виводу і як він працює?

3. Перерахуєте три варіанти переобтяженої функції cin.get() і вкажіть основні їх відмінності.

4. Чим cin.read() відрізняється від cin.getline()?

5. Яка ширина встановлюється за умовчанням для виведення довгих цілих чисел за допомогою оператора виводу?

6. Яке значення повертає оператора виводу?

7. Який параметр приймається конструктором об'єкту ofstream?

8. Що встановлює аргумент ios::ate?

Вправи

1. Напишіть програму, що використовує чотири стандартні об'єкти класу iostream, — cin, cout, cerr і clog.

2. Напишіть програму, що пропонує користувачеві ввести своє повне ім'я з подальшим виведенням цього імені на екран.

3. Перепишіть лістинг 16.9, відмовившись від використання методів putback() і ignore().

4. Напишіть програму, що прочитує ім'я файлу як аргумент командного рядка і відкриває файл для читання. Розробіть алгоритм аналізу всіх символів, що зберігаються у файлі, і виведіть на екран лише текстові символи і розділові знаки (пропускайте всі недруковані символи). Закрийте файл перед завершенням роботи програми.

5. Напишіть програму, яка виведе задані аргументи командного рядка в зворотному порядку, відкинувши ім'я програми.

45