Advertisement
Week045

Class String

Oct 5th, 2022
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. class String {
  8. private:
  9.     char* st;
  10.     int size;
  11. public:
  12.     String(int);
  13.     String(const char* s, int);
  14.     String(String&, int);
  15.     ~String();
  16.     void dislpay() const;
  17.     void get();
  18.     String operator=(String);
  19.     String operator+(String) const;
  20.     void operator+=(String);
  21.     bool operator==(String) const;
  22.     bool operator!=(String) const;
  23.     char& operator[](int);
  24.     void operator()(int, int) const;  
  25.     friend istream& operator>>(istream&, String&);
  26.     friend ostream& operator<<(ostream&, String&);
  27. };
  28.  
  29. String::String(int size = 80) {
  30.     this->size = size;
  31.     st = new char[this->size];
  32.     st[0] = '\0';
  33.     //cout << "Был вызван конструктор: " << this << endl;
  34. }
  35. String::String(const char* s, int size = 80) {
  36.     this->size = size;
  37.     st = new char[this->size];
  38.     strcpy(st, s);
  39.     cout << "Был вызван конструктор: " << this << endl;
  40. }
  41. String::String(String& other, int size = 80) {
  42.     this->size = other.size;
  43.     this->st = new char[this->size];
  44.     strcpy(this->st, other.st);
  45.     cout << "Был вызван конструктор копирования: " << this << endl;
  46. }
  47. String::~String() {
  48.     delete[] st;
  49.     cout << "Был вызван деструктор: " << this << endl;
  50. }
  51. void String::dislpay()const {
  52.     cout << "Строка: " << st << endl;
  53. }
  54. void String::get() {
  55.     cout << "Напишите строку: ";
  56.     cin >> st;
  57. }
  58. String String::operator+(String s) const {
  59.     String temp;
  60.     strcpy(temp.st, st);
  61.     strcat(temp.st, s.st);
  62.     return temp;
  63. }
  64. String String::operator=(String s) {
  65.     return String(strcpy(st, s.st));
  66. }
  67. void String::operator+=(String s) {
  68.     strcat(st, s.st);
  69. }
  70. bool String::operator==(String s) const {
  71.     if (!strcmp(st, s.st))
  72.         return true;
  73.     else return false;
  74. }
  75. bool String::operator!=(String s) const {
  76.     if(!strcmp(st, s.st))
  77.         return false;
  78.     return true;
  79. }
  80. char& String::operator[](int index) {
  81.     if (index >= size) {
  82.         cout << "Ошибка!" << endl;
  83.         exit(1);
  84.     }
  85.     return *(st + index);
  86. }
  87. void String::operator()(int start, int end) const {
  88.     if (start < 0 || end >= size) {
  89.         cout << "Ошибка!" << endl;
  90.         exit(1);
  91.     }
  92.     cout << "Символы: ";
  93.     for (int i = start; i <= end; i++)
  94.         cout << *(st + i);
  95.     cout << endl;
  96. }
  97. istream& operator>>(istream& in, String& s) {
  98.     return in >> s.st;
  99. }
  100. ostream& operator<<(ostream& out, String& s) {
  101.     return out << s.st;
  102. }
  103.  
  104. int main() {
  105.     setlocale(LC_ALL, "Russian");
  106.     String st1 = "test1 ";
  107.     String st2 = "test2 ";
  108.     String st9;
  109.  
  110.     st9 = st1 + st2;
  111.  
  112.     cout << st9;
  113.     return 0;
  114. }
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement