68938

Створення власних маніпуляторів

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2014-09-27

41.5 KB

1 чел.

Лекція № 30

Тема: Створення власних маніпуляторів

План

  1.  Створення маніпуляторів
  2.  Маніпулятори виведення
  3.  Маніпулятори введення

Створення власних маніпуляторів

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

Власні маніпулятори повністю відповідають принципам об'єктно-орієнтованого програмування, але вони можуть виявитися корисними і для програм, створених в рамках процедурного програмування. Як ми згодом переконаємося, власні маніпулятори можуть допомогти ефективніше і просто виконати будь-яку програму, що інтенсивно виконує введення і виведення даних.

Як відомо, існують два типи маніпуляторів: для введення і для виводу. Крім того, маніпулятори розділяються на такі, що отримують аргументи і що не мають їх. Чесно кажучи, процедури, необхідні для створення маніпуляторів з параметрами, сильно залежать від конкретного компілятора і навіть від його версії. З цієї причини, перш ніж приступати до розробки маніпулятора з параметром, слід звернутися до документації, що описує компілятор. В той же час маніпулятори, що не мають параметрів, створюються досить просто, причому ця процедура для всіх компіляторів однакова.

Маніпулятори виведення

Скелет маніпулятора, що не має параметрів, виглядає так.

ostream &ім’я_маніпулятора (ostream &stream)

{

// Код

return stream;

}

Звернете увагу на те, що маніпулятор повертає посилання на потік типу ostream. Це дозволяє використовувати маніпулятор усередині складніших виразів. Слід мати на увазі, що хоча формально маніпулятор має один аргумент, що є посиланням на потік, при вставці маніпулятора в оператора виводу цей аргумент не указується.

Розглянемо програму, в якій описаний маніпулятор sethex(), що встановлює прапор showbase і виведення чисел, що породжує, в шістнадцятковому форматі.

#include <iostream>

#include <iomanip>

using namespace std;

// Простий маніпулятор виводу,

ostream &sethex(ostream &stream)

{

stream.setf(ios::showcase);

stream.setf(ios::hex, ios::basefield);

return stream;

}

int main()

{

cout « 256 « " " « sethex « 256;

return 0;

}

Ця програма виводить на екран наступні числа.

256 0x100

Очевидно, що маніпулятор sethex використовується як частина оператора виводу.

Власні маніпулятори не повинні бути дуже складними. Наприклад, прості маніпулятори la() і ra() виводять на екран стрілки, направлені вліво і управо.

#include <iostream>

#include <iomanip>

using namespace std;

// Стрілка, направлена управо

ostream &ra(ostream &stream)

{

stream << " > " ;

return stream;

}

// Стрілка, направлена вліво

ostream &la(ostream &stream)

{

stream « " < ";

return stream;

}

int main()

{

cout « "Залишок на рахунку " « ra « 1233.23 « "\n";

cout << "Заборгованість " « ra << 567.66 << la;

return 0;

}

Ця програма виводить на екран наступні рядки.

Залишок на рахунку > 1233.23

Заборгованість  > 567.66 <

Якби ці стрілки доводилося часто виводити уручну, ви швидко б втомилися.

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

Маніпулятори введення

Всі маніпулятори введення, що не мають параметрів, виглядають таким чином.

istream &ім’я_маніпулятора (ostream Scstream)

{

// Код

return stream;

}

Маніпулятор введення отримує посилання на потік, для якого він викликається, а потім повертає її модулю, який його викликає.

У наступній програмі маніпулятор getpass() призначений для генерації сигналу і введення пароля.

#include <iostream>

#include <cstring>

using namespace std;

// Простій маніпулятор введення

istream &getpass(istream &stream)

{

cout « '\a'; // Звуковий сигнал

cout « "Введіть пароль: ";

return stream;

}

int main()

{

char pw[80];

do 

{

cin » getpass >> pw;

} while (strcmp(pw, "пароль"));

cout « "Вхід в систему виконаний \n";

return 0;

}

Зверніть увагу на те, що маніпулятор повинен повертати посилання на об'єкт класу istream, інакше його буде неможливо використовувати в ланцюжках операторів введення-виводу.


 

А также другие работы, которые могут Вас заинтересовать

24149. Культура России в XVI в. 32.19 KB
  Фольклор Фольклор XVI в. в XVI в. Публицистика XVI в.
24150. Культура России в 1598-1613 гг 25.48 KB
  Первый период смуты характеризуется борьбой за престол различных претендентов. Таким образом первый этап смуты был отмечен правлением Лжедмитрия I 1605 1606 гг. Второй период смуты. Третий период смуты характеризуется борьбой с иноземными захватчиками.
24151. Экономическое развитие России в XVII в. XVII в 21.87 KB
  XVII в время массового заселения Волги Предуралья начало освоения Сибири. Новым было в XVII в. Всего в XVII в.
24152. Внутренняя политика России в XVII в 20.78 KB
  За малолетних правителей власть осуществляла царевна Софья пытавшаяся отдалить Петра от престола. Софья не желая расставаться с властью подняла против Петра стрелков но восстание было жестоко подавлено а Софья заточена в монастырь.
24153. Внешняя политика России в 17 веке 31.17 KB
  Западнорусские земли стали ареной борьбы населения против угнетения польской шляхтой. начался почти непрерывный ряд казацких восстаний против Польши. В Киевской области было образовано войско реестровых внесенных в списки казаков которые однако переходили на сторону мятежных запорожцев и обращали свое оружие против поляков. Под его командованием русская армия предприняла два неудачных похода против Крымского ханства 1687 1689 находившегося в вассальной зависимости от Турции.
24154. Культура России. 17 век 34 KB
  17 век XVII в. Мы часто говорим: древнерусская культура IXXVII веков но никогда не продлим это определение на следующий XVIII в. Такая переходность культуры в XVII в. В русской архитектуре XVII в.
24155. Россия на рубеже XVII -XVIII веков 30.86 KB
  Разрешение этих задач до Петра было только начато. Точно так же и первая задача национальнополитическая состоявшая в необходимости государственного объединения русского народа еще задолго до Петра вызвала ряд упорных войн с третьим врагом и ближайшим соседом Речью Посполитой. Но еще до Петра московским правительством была сознана невозможность одновременного разрешения обеих задач. Так еще до Петра покинута была на неопределенное время мысль о национальнополитическом объединении русского народа: чтобы поддержать добрые отношения с...
24156. Преобразования Петра I. Северная война 31.8 KB
  2011 Рубрика: История России 08 Петр I После смерти Федора на престол должен был взойти его брат Иван однако он был слаб здоровьем и патриарх с боярами предложили объявить царем Петра. По их требованию Софья была назначена регентом при малолетних Иване и Петре. Детство Петра прошло в селе Преображенском и в Немецкой слободе среди иностранных авантюристов ученых военных.
24157. Эпоха дворцовых переворотов 28.27 KB
  В первые годы прошедшие со смерти Петра Великого судьбу русского престола нельзя назвать благополучной: с 1725 г. Причинами дворцовых переворотов по мнению большинства историков стали: ü указ Петра 1 от 1722 года о наследии престола; ü большое количество прямых и косвенных наследников дома Романовых; ü противоречия между самодержавной властью правящей верхушкой и господствующим сословием. К концу правления Петра I напряженность отношений в этом треугольнике достигла критической отметки что было вызвано крайне невыгодным для...