Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать
  1. Створення власних маніиуляторних функцій

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

Всі непараметризовані маніпуляторні функції виведення даних мають таку структуру:

ostream &manip_name(ostream &stream)

{

// код маніпуляторної функції

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

}

У цьому записі елемент manip_name вказує ім'я маніпулятора. Важливо розуміти особливості використання не параметризованих маніпуляторів. Незважаючи на те, що маніпулятор приймає як єдиний аргумент покажчик на потік, який він оброб­ляє, проте при використанні маніпулятора в остаточному виразі введення-виве- дення аргументи не вказуються взагалі.

У наведеному нижче коді програми створюється маніпулятор setupO, який встановлює опцію вирівнювання лівим краєм, ширину поля в 10 символів і задає як заповнювальний символ знак долара.

Код програми 9.9. Демонстрація механізму створення маніпулятора setupO #include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

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

ostream &setup(ostream &stream)

{

stream.setf(ios::left); // Вирівнювання лівим краєм

І* Встановлює ширину поля в 10 символів і задає як заповнювальний символ знак долара*/ stream « setw(10) « setfill('$');

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

}

int mainO

{

cout« 10 «"" « setup « 10; getchO; return 0;

}

Створення власних маніпуляторів є корисним з двох причин:

  • по-перше, іноді виникає потреба виконувати операції введення-виведення даних з використанням пристрою, до якого жоден з вбудованих маніпуляторів не застосо­вується (наприклад, плоттер). У цьому випадку створення власних маніпуляторів зробить виведення даних на цей пристрій зручнішим;

  • по-друге, може так статися, що у створеній Вами програмі певна послідовність нас­танов повторюється декілька разів. І тоді ці операції можна об'єднати в один маніпу­лятор так, як це показано у попередній програмі.

Всі непараметризовані маніпуляторні функції введення даних мають таку структуру:

istream &man/p_name(istream &stream)

{

// код маніпуляторної функції

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

}

Наприклад, у наведеному нижче коді програми створюється маніпулятор prompt(). Він налаштовує вхідний потік на прийняття даних у шістнадцятковому представленні та виводить для користувача відповідне повідомлення.

Код програми 9.10. Демонстрація механізму створення маніпулятора prompt() #include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

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

istream &prompt(istream &stream)

{

сіп » hex;

cout«"Введіть число в шістнадцятковому форматі:"; return stream; // Повертає посилання на параметр stream

}

int mainO

{

int c;

ein » prompt» c;

cout« c; // Виведення числа в шістнадцятковому форматі

getchO; return 0;

_}

Неоі хідноапам ятати! Надзвичайно важливо, щоб створений програ­містом маніпулятор повертав потоковий об'єкт (елемент stream). Інак­ше цей маніпулятор не можна буде використовувати у складеному вира­зі введення або виведення.