Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание собственных манипуляторов



В дополнение к перегрузке операторов вывода/ввода, вы можете создать свою подсистему ввода/вывода C++, определив, собственные функции-манипуляторы. Создание пользовательских манипуляторов позволяет объединить несколь­ко отдельных действий по вводу/выводу в один манипулятор.

Рассмотрим процесс создания манипуляторов без параметров. Все манипуляторы без параметров для вывода имеют следующую форму:

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

{

//Код программы

return stream;

}

Все манипуляторы без параметров для ввода имеют такую форму:

istream &имя_манипулятора (istream &stream)

{

//Код программы

return stream;

}

Манипулятор получает в качестве параметра ссылку на поток, для которого он создается, а возвращать должен этот поток.

Примеры:

1. Рассмотрим первый простой пример. В следующей программе создается манипулятор setup(), который устанавливает ширину поля вывода равную 10, точность равную 4 и символ заполнения *.

#include <iostream. h>

ostream &setup (ostream &stream)

{ stream. width(lO),-

stream. precision{4);

stream. fill('*');

return stream;

}

main()

{ cout << setup << 123.123456;

return 0;

}

Как можно заметить, setup используется в качестве части выражения ввода/вывода точно так же, как используются любые встроенные манипуляторы.

2. В этой программе создается манипулятор getpass(), который вызывает гудок динамика и, затем, предлагает ввести пароль:

#include <lostrearn.h>

#include <string.h>

istream &getpass (istream &istream) // Простой манипулятор ввода

{ cout << ' \a'; // гудок динамика

cout << "Введите пароль";

return stream;

}

main()

{ char pw[80];

do

{ cin >> getpass >> pw;

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

cout << "Пароль введен верно\n"

return 0;

}

4.2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.

1. Изучить материал данного методического пособия, привлекая лекции и дополнительную литературу;

2. Разработать схемы алгоритмов и программу для обработки данных в соответствии с конкретным вариантом.

4.3. ВАРИАНТЫ ЗАДАНИЙ

1. Написать, используя флаги формата ios, программу вывода:

- величины 1000.5364 в 20-символьном поле, с выравниванием по левому полю, с двумя позициями после запятой и символом * в качестве символа заполнения;

- числа, вводимого с клавиатуры, в десятичной, шестнадцатеричной и восьмеричной системе счисления.

2. Используя условие задания 1, написать программу, применив манипуляторы ввода/вывода для форматирования информации.

3. Используя класс, который преобразует дюймы в мм (1 дюйм = 25,4 мм), создайте:

- функцию извлечения, предлагающую пользователю ввести число дюймов;

- функцию вставки для вывода на экран числа дюймов и мм.

class inches_to_mm{ double inches;

double mm;

public:

void set(double in) { inches = in;

mm=in * 25.4;

}

};

4. Дан класс:

class data { char str[9]; //дата представлена в виде строки “mm/dd/yy”

public: //добавить функции вставки и извлечения

};

Создайте для него собственные функции вставки для работы с потоками классов ostream/ofstream и извлечения для работы с потоками классов istream/ ifstream.

4.4. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что такое поток? Стандартные потоки ввода/вывода.

2.

3.

4.

5.


ЛИТЕРАТУРА

1. Крячков А.В., Сухинина И.В., Томшин В.К

«Программирование на С и С++. Практикум» -

М.: «Горячая линия-Телеком», 2008. - 344 с.:ил.

2. Климова Л.М.

«Основы практического программирования на языке С++» -

М.: «Издательство ПРИОР», 2003. - 464 с.

3. Подбельский В.В., Фомин С.С.

«Программирование на языке Си: Учебное пособие» -

М.: «Финансы и статистика», 2003. – 600 с.: ил.

4. ШИЛДТ Г.

«С++. Базовый курс: пер. с англ. – СПб.» -

«BHV – Санкт-Петербург», 2005. – 512 с., ил.

5. ПАХОМОВ Б.И

«С/С++ и MS Visual C++2005 для начинающих: пер. с англ. – СПб.» -

«BHV – Санкт-Петербург», 2007. – 464 с., ил.





Дата публикования: 2015-02-22; Прочитано: 1638 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...