С++ для начинающих



         

Перегрузка оператора вывода - часть 3


ostream&

operator <<( ostream& os, const WordCount& wd )

{

    os << "<" << wd._occurList.size() << "> "

       << wd._word << endl;

    int cnt = 0, onLine = 6;

    vector< Location >::const_iterator first =

            wd._occurList.begin();

    vector< Location >::const_iterator last  =

            wd._occurList.end();

    for ( ; first != last; ++first )

    {

        // os << Location

        os << *first << " ";

       // форматирование: по 6 в строке

       if ( ++cnt >= onLine )

          { os << "\n"; cnt = 0;  }

    }

    return os;

}

А вот небольшая программа для тестирования нового определения класса WordCount; позиции вхождений для простоты “зашиты” в код:

int main()

{

    WordCount search( "rosebud" );

    // для простоты явно введем 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;           // дата возврата

   pair<string,string> borrower;  // кому выдана

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

};




Содержание  Назад  Вперед