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




Типы классов - часть 7


#include <iomanip>

inline istream&

operator>>( istream &io, String &s )

{

    // искусственное ограничение: 4096 символов

    const int 1imit_string_size = 4096;

    char inBuf[ limit_string_size ];

    // setw() входит в библиотеку iostream

    // он ограничивает размер читаемого блока до 1imit_string_size-l

    io >> setw( 1imit_string_size ) >> inBuf;

    s = mBuf; // String::operator=( const char* );

    return io;

}

Оператору вывода необходим доступ к внутреннему представлению строки String. Так как operator<< не является функцией-членом, он не имеет доступа к закрытому члену данных _string. Ситуацию можно разрешить двумя способами: объявить operator<< дружественным классу String, используя ключевое слово friend (дружественные отношения рассматриваются в разделе 15.2), или реализовать встраиваемую (inline) функцию для доступа к этому члену. В нашем случае уже есть такая функция: c_str() обеспечивает доступ к внутреннему представлению строки. Воспользуемся ею при реализации операции вывода:

inline ostream&

operator<<( ostream& os, const String &s )

{

    return os << s.c_str();

}

Ниже приводится пример программы, использующей класс String. Эта программа берет слова из входного потока и подсчитывает их общее число, а также количество слов "the" и "it" и регистрирует встретившиеся гласные.

#include <iostream>

#inc1ude "String.h"

int main() {

    int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0,

        theCnt = 0, itCnt = 0, wdCnt = 0, notVowel = 0;

    // Слова "The" и "It"

    // будем проверять с помощью operator==( const char* )

    String but, the( "the" ), it( "it" );

    // operator>>( ostream&, String& )

    while ( cin >> buf ) {

        ++wdCnt;

        // operator<<( ostream&, const String& )

        cout << buf << ' ';




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