Читаем C++ для начинающих полностью

// для простоты явно введем 8 вхождений

search.found(11,3); search.found(11,8);

search.found(14,2); search.found(34,6);

search.found(49,7); search.found(67,5);

search.found(81,2); search.found(82,3);

search.found(91,4); search.found(97,8);

cout "Вхождения: " "\n"

search endl;

return 0;

}

После компиляции и запуска программа выводит следующее:

Вхождения:

10 rosebud

11,3 11,8 14,2 34,6 49,7 67,5

81,2 82,3 91,4 97,8

Полученный результат сохранен в файле output. Далее мы определим оператор ввода, с помощью которого прочитаем данные из этого файла.

Упражнение 20.7

Дано определение класса Date:

class Date {

public:

// ...

private:

int month, day, year;

};

Напишите перегруженный оператор вывода даты в формате:

(a)

// полное название месяца

September 8th, 1997

(b)

9 / 8 / 97

(c) Какой формат лучше? Объясните.

(d) Должен ли оператор вывода Date быть функцией-другом? Почему?

Упражнение 20.8

Определите оператор вывода для следующего класса CheckoutRecord:

class CheckoutRecord { // запись о выдаче

public:

// ...

private:

double book_id; // идентификатор книги

string title; // название

Date date_borrowed; // дата выдачи

Date date_due; // дата возврата

pairstring,string borrower; // кому выдана

vector pairstring,string wait_list; // очередь на книгу

};

<p>20.5. Перегрузка оператора ввода</p>

Перегрузка оператора ввода () похожа на перегрузку оператора вывода, но, к сожалению, возможностей для ошибок гораздо больше. Вот, например, его реализация для класса WordCount:

#include iostream

#include "WordCount.h"

/* необходимо модифицировать определение класса WordCount, чтобы

оператор ввода был другом

class WordCount {

friend ostream& operator&&( ostream&, const WordCount& );

friend istream& operator&&( istream&, const WordCount& );

*/

istream&

operator ( istream &is, WordCount &wd )

{

/* формат хранения объекта WordCount:

* 2 строка

* 7,3 12,36

*/

int ch;

/* прочитать знак ''. Если его нет,

* перевести поток в ошибочное состояние и выйти

*/

if ((ch = is.get()) != '' )

{

// is.setstate( ios_base::badbit );

return is;

}

// прочитать длину

int occurs;

is occurs;

// читать до обнаружения ; ошибки не контролируются

while ( is && (ch = is.get()) != '' ) ;

is wd._word;

// прочитать позиции вхождений;

// каждая позиция имеет формат: строка, колонка

for ( int ix = 0; ix occurs; ++ix )

{

int line, col;

// извлечь значения

while (is && (ch = is.get())!= '&' ) ;

is line;

while (is && (ch = is.get())!= ',' ) ;

is col;

while (is && (ch = is.get())!= '&' ) ;

wd._occurList.push_back( Location( line, col ));

}

return is;

}

* На этом примере показан целый ряд проблем, имеющих отношение к возможным ошибочным состояниям входного потока: поток, чтение из которого невозможно из-за неправильного формата, переводится в состояние fail:

is.setstate( ios_base::failbit );

* операции вставки и извлечения из потока, находящегося в ошибочном состоянии, не работают:

while (( ch = is.get() ) != lbrace)

Инструкция зациклится, если объект istream будет находиться в ошибочном состоянии. Поэтому перед каждым обращением к get() проверяется отсутствие ошибки:

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных