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, інакше його буде неможливо використовувати в ланцюжках операторів введення-виводу.


 

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

33842. Марксизм. Материалистическая философия жизни 15.08 KB
  и особенно XX столетия явился марксизм. Маркс и Ф. В марксистской философии появилось новое содержание отсутствовавшее в прежних философских системах но выработанное на базе внутренней преемственности в решении ряда кардинальных проблем. Сущность нового внесенного марксизмом в философию можно проследить по следующим линиям: по функциям философии; по соотношению в ней партийности гуманизма и научности; по предмету исследования; по структуре составу и соотношению основных сторон разделов содержания; по соотношению теории и метода; по...
33843. ПРЕДПОСЫЛКИ ФИЛОСОФИИ А. ШОПЕНГАУЭРА 16.61 KB
  НИЦШЕ Французский философ Анри Бергсон 18591941 понимал жизнь в космологическом плане. Для немца Фридриха Ницше 18441900 в основе всего находится не воля к жизни как у Шопенгауэра а воля к власти. Лозунг Ницше: Живи опасно. Ницше прекрасный филолог и музыкальный импровизатор к тому же страдающий от недугов.
33844. ПОЗИТИВИСТСКАЯ КОНЦЕПЦИЯ 14.12 KB
  Последняя уничижительно объявляется позитивистами псевдознанием мимикрией под науку спекулятивным умозрительным теоретизированием не имеющим для современной науки не только никакого позитивного значения а скорее отрицательное так как философский дискурс способен только заразить науку вирусом псевдознания. Ньютон вот формулы позитивистского решения вопроса о соотношении философии и науки. Спенсер методология науки Дж.
33845. ПОНЯТИЕ ГЕРМЕНЕВТИКИ 18.05 KB
  Понимание тогда выступает как непосредственное проникновение в жизнь. Понимание собственного духовного мира достигается в процессе самонаблюдения понимание чужого мира путем вживания сопереживания вчувствования. Именно в стихии языка осуществляется понимание людьми и окружающего мира и самих себя и других.
33846. Философская антропология, Макс Шелер (1874–1928) 15.15 KB
  В центре внимания этого течения проблема человека а основная идея создание интегральной концепции человека. Философская антропология объявив себя основополагающей философской дисциплиной пытается на основе тех или иных особенностей человека найти способы постановки и решения всех философских проблем. В отличие от рационалистических учений философская антропология вовлекает в сферу исследования душевнодуховную жизнь человека эмоции инстинкты влечения что зачастую приводит к иррационализму: представители данного направления...
33848. Характеристика западной философии 16.81 KB
  Эти же вопросы являются предметом исследования и других форм общественного сознания в частности и философии. Теология как одна из форм выражения религиозного сознания имеет ряд специфических черт которые отличают ее от философии. Проблема соотношения философии и теологии возникла в первые века существования христианства и несостоятельная своей актуальности до наших дней.
33849. Особенности развития русской философии 20.54 KB
  В качестве самостоятельного духовного явления о русской философии может идти речь начиная с конца XVIII начала XIX в. Первые известные за пределами России представители русской православной философии В. Дальнейшее развитие русской философии связано с тремя основными направлениями: психологическим рефлексология Бехтерева и Павлова теософскомистическим в лице русского космизма Е.
33850. Профессиональные заболевания медицинских работников 64.94 KB
  Медицинские работники занимают пятое место по распространенности профессиональной заболеваемости, опережая даже работников химической промышленности. Данные исследований, проведенных десятки лет назад и в последние десятилетия, убедительно свидетельствуют о том, что многие заболевания у медицинских работников являются профессиональными...