Читаем Освой самостоятельно С++ за 21 день. полностью

Если в вашем компиляторе нет встроенного класса String, а иногда и в тех случаях, когда он есть, бывает необходимо создать собственный класс работы со строками. Далее в этой главе рассматривается процедура создания и применения класса String и пользовательских классов работы со строками.

Как минимум, класс String должен преодолеть ограничения, свойственные использованию массивов символов. Подобно другим массивам, массивы символов статичны. Вам приходится задавать их размер при объявлении или инициализации. Они всегда занимают все отведенное для них пространство памяти, даже если вы используете только по- ловину элементов массива. Запись данных за пределы массива ведет к катастрофе.

Хорошо написанный класс работы со строковыми данными выделяет столько памяти, сколько необходимо для текущего сеанса работы с программой, и всегда предусматривает возможность добавления новых данных. Если с выделением дополнительной памяти возникнут проблемы, предусмотрены элегантные пути их решения. Первый пример использования класса String показан в листинге 12.12.

Листинг 12.12. Использование класса String

1: // Листинг. 12.12

2:

3: #include

4: #include

5:

6: // Рудиментарный класс string

7: class String

8: {

9:    public:

10:      // Конструкторы

11:      String

12:      Stnng(const char *const),

13:      Stnng(const String &),

14:      ~Stnng

15:

16:      // Перегруженные операторы

17:      char & operator[](unsigned short offset),

18:      char operator[](unsigned short offset) const,

19:      Stnng operator+(const String&),

20:      void operator+=(const String&)

21:      Stnng & operator= (const Stnng &),

22:

23:      // Основные методы доступа

24:      unsigned short GetLenconst { return itsLen, }

25:      const char * GetStnng const { return itsStnng, }

26:

27:  private:

28:     Stnng (unsigned short), // Закрытый конструктор

29:     char * itsStnng,

30:     unsigned short itsLen

31: }

32:

33: // Конструктор, заданный no умолчанию, создает строку нулевой длины

34: String String

35: {

36:    itsStnng = new char[1]

37:    itsStrmg[0] = '\0'

38:    itsLen=0;

39: }

40:

41: // Закрытый (вспомогательный) конструктор

42: // используется только методами класса для создания

43: // строк требуемой длины с нулевым наполнением

4й: String String(unsigned short len)

45: {

46:    itsStnng = new char[len+1]

47:    for (unsigned short i = 0 i<=len, i++)

48:    itsString[i] = \0 ,

49:    itsLen=len,

50: }

51:

52: // Преобразование массива символов в строку

53: String String(const char * const cString)

54: {

55:    itsLen = strlen(cString);

56:    itsString = new char[itsLen+1];

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

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

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

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