Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.35 KB | None | 0 0
  1. #pragma once    //простой вариант для заголовочных файлов
  2.  
  3. //классический вариант условной компиляции
  4. //#ifndef _String_h_
  5. //#define _String_h_
  6. //обратите внимение на директиву #endif в конце файла
  7.  
  8. #include <iostream>
  9.  
  10. /*
  11. Обратите внимание, что большинство методов
  12. реализованы в двух вариантах:
  13. 1. с аргументом const String&
  14. 2. с аргументом const char*
  15. Второй вариант не обязателен,
  16. т.к. работает неявное приведеление типов.
  17. Компилятор понимает, что должен получить
  18. объект String, но видит аргумент типа char*.
  19. Тогда он начинает искать конструктор класса
  20. String, принимающий char*. Такой конструктор
  21. существует, поэтому создаётся временный объект.
  22. Но в ходе его создания вызывается
  23. потенциально длительная функция strcpy.
  24. Если можно избежать лишнего её вызова,
  25. это следует сделать. Поэтому почти все методы
  26. класса и имеют по 2 версии, с разным типом аргумента.
  27. */
  28.  
  29. class String
  30. {
  31. private:
  32.     char* str;
  33.     int len;
  34.     String(const int length);       //приватный(!) конструктор
  35. public:
  36.     String(const char* s = "");     //обратите внимание, что предусмотрено значение по умолчанию
  37.     String(const String& s);        //конструктор копирования
  38.     char& operator[] (const int i); //доступ к символу по индексу с возможностью редактирования
  39.     const char& operator[] (const int i) const; //доступ к символу для константных объектов
  40.     String& operator= (const String& s);   
  41.     String& operator= (const char* s);
  42.     String operator+ (const String& s) const;
  43.     String operator+ (const char* s) const;
  44.     String& operator+= (const String& s);
  45.     String& operator+= (const char* s);
  46.     bool isEmpty() const;       //проверка - строка пуста?
  47.     bool operator== (const String& s) const;
  48.     bool operator== (const char* s) const;
  49.     bool operator!= (const String& s) const;
  50.     bool operator!= (const char* s) const;
  51.     bool operator< (const String& s) const;
  52.     bool operator< (const char* s) const;
  53.     bool operator<= (const String& s) const;
  54.     bool operator<= (const char* s) const;
  55.     bool operator> (const String& s) const;
  56.     bool operator> (const char* s) const;
  57.     bool operator>= (const String& s) const;
  58.     bool operator>= (const char* s) const;
  59.     int length() const;     //получение значения приватного поля len
  60.     String& clear();        //очищаем строку, но не удаляем сам объект
  61.     String substring(int begin, int end) const; //формируем подстроку, копирую символы с индексами от begin до end
  62.     String left(int count) const;   //подстрока длиной count, начиная с левого края
  63.     String right(int count) const;  //подстрока длиной count, начиная с правого края
  64.     bool hasSubstring(const String& s) const;   //проверка на наличие подстроки в строке
  65.     bool hasSubstring(const char* s) const;
  66.     bool hasSymbol(const char symbol) const;    //проверка на наличие символа в строке
  67.     String removeSubstring(int begin, int end) const;   //формируем строку, исключая символы с индексами от begin до end
  68.     String removeSubstring(const String& s) const;      //формируем строку, исключая заданную подстроку
  69.     String removeSubstring(const char* s) const;
  70.     String removeLeft(int count) const;         //формируем строку, исключая count символов слева
  71.     String removeRight(int count) const;        //формируем строку, исключая count символов справа
  72.     String getFirstWord(const String& separator) const; //формируем строку, в которое записываем первое слово текущей
  73.     String getLastWord(const String& separator) const;  //формируем строку, в которое записываем последнее слово текущей
  74.     ~String();
  75.  
  76.     //перегрузка операций, в случае если первый операнд - строка в стиле Си (char*)
  77.     friend String operator+ (const char* s1, const String& s2);
  78.     friend bool operator== (const char* s1, const String& s2);
  79.     friend bool operator!= (const char* s1, const String& s2);
  80.     friend bool operator> (const char* s1, const String& s2);
  81.     friend bool operator< (const char* s1, const String& s2);
  82.     friend bool operator>= (const char* s1, const String& s2);
  83.     friend bool operator<= (const char* s1, const String& s2);
  84.    
  85.     //перегрузка <<, обеспечивающая вывод с использованием cout
  86.     friend std::ostream& operator<<(std::ostream& os, const String& s);
  87. };
  88.  
  89. //#endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement