Advertisement
Guest User

Untitled

a guest
Jul 15th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  1.  
  2. #define DEBUG
  3. //если DEBUG определён - освобождение памяти выполняется
  4. //если не определён - освобождения памяти нет
  5.  
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. class Class_name
  11. {
  12. public:
  13. int size; //размер одномерного массива, задаётся при создании объекта
  14. int * data; //указатель на массив, создаётся в конструкторе создания, размера size
  15. Class_name() //перегрузка конструктор класса по умолчанию
  16. {
  17. this->size = 10;
  18. this->data = new int[size];
  19. for (int i = 0; i < size; ++i) {
  20. data[i] = 0;
  21. }
  22. }
  23.  
  24. Class_name(int size) //перегрузка конструктора класса - создание массива размером size
  25. {
  26. this->size = size; //размер поля size класса равен передаваемой в конструктор переменной size
  27. this->data = new int[size]; //создаём массив в динамической памяти
  28. for (int i = 0; i < size; ++i) { //заполняем динамический массив
  29. data[i] = i;}
  30. }
  31.  
  32. Class_name(const Class_name& other) //конструктор копирования - принимает другой объект класса
  33. {
  34. this->size = other.size; //размер поля size нового элемента равен размеру копируемого поля объекта
  35. this->data = new int[other.size]; //выделяем память под массив
  36. for (int i = 0; i < other.size; ++i) {
  37. this->data[i] = other.data[i];} //копируем поэлементно поля
  38. }
  39.  
  40. Class_name& operator = (const Class_name& other) //перегружаем оператор =
  41. {
  42. this->size = other.size; //копируем статическое поле size
  43. if (this->data != nullptr) //очищаем прошлую память, если она не пуста
  44. delete[] this->data;
  45. this->data = new int[other.size]; //выделяем память по новой
  46. for (int i = 0; i < other.size; ++i) { //копируем значения
  47. this->data[i] = other.data[i];
  48. }
  49. return *this; //возвращаем указатель на новый объект
  50. }
  51. //ПЕРЕГРУЗКА ОПЕРАТОРА СЛОЖЕНИЯ
  52. Class_name operator + (const Class_name & other)
  53. {
  54. Class_name result_object;
  55. #ifdef DEBUG
  56. delete[] result_object.data;
  57. cout << "memory was anlock" << endl;
  58. #else
  59. cout << "memory was not anlock" << endl;
  60. #endif //DEBUG
  61. result_object.size = this->size + other.size;
  62. result_object.data = new int[result_object.size];
  63. int i = 0;
  64. for (; i < this->size; ++i) {
  65. cout << i;
  66. result_object.data[i] = this->data[i];
  67. }
  68. for (int j = 0; i < result_object.size; ++j, ++i) {
  69. result_object.data[i] = other.data[j];
  70. }
  71. return result_object;
  72. }
  73.  
  74. bool operator == (const Class_name& other)//перегружаем оператор равенства
  75. {
  76. if (this->size != other.size) { return false; } //если размеры массивов не равны - равенства нет
  77. for (int i = 0; i < size; ++i) { //сравниваем массивы поэлементно
  78. if (this->data[i] != other.data[i]) { return false; }
  79. }
  80. return true; //возвращаем да если пройдены все проверки
  81. }
  82. bool operator != (const Class_name& other)//перегружаем оператор не равенства
  83. {
  84. if (this->size != other.size) { return true; }
  85. for (int i = 0; i < size; ++i) {
  86. if (this->data[i] != other.data[i]) { return true; }
  87. }
  88. return false;
  89. }
  90.  
  91. ~Class_name() //деструктор - освобождаем динамическую память
  92. {delete[] data;}
  93.  
  94. void Function_Show()
  95. {
  96. cout << "this = "<< this << endl; //ссылка на объект
  97. cout << "size = " << size << " adress = "<< &size << endl;//размер массива в объекте
  98. cout << "data = " << data << endl;
  99. for (int i = 0; i < size; ++i) {
  100. cout << "data[" << i << "] = " << data[i] <<" adress = " << &data[i] << endl;
  101. }
  102. cout << endl;
  103.  
  104. }
  105. };
  106.  
  107. int main() {
  108.  
  109. setlocale(LC_ALL, "ru");
  110.  
  111. Class_name A(10);
  112. Class_name B(A);
  113. cout << "object A" << endl;
  114. A.Function_Show();
  115. cout << endl << "object B" << endl;
  116. B.Function_Show();
  117. Class_name C;
  118. cout << endl << "object C" << endl;
  119. C.Function_Show();
  120.  
  121. cout<<"is A equal C befor copy =? " << (A == C) << endl;
  122. cout << "true = " << true << endl;
  123. cout << "false = " << false << endl;
  124.  
  125. cout << endl << "object A befor C=A" << endl;
  126. A.Function_Show();
  127. C = A;
  128. cout << endl << "object C after C=A" << endl;
  129. C.Function_Show();
  130.  
  131. cout << "is A equal C after copy? = " << (A == C) << endl;
  132. cout << "true = " << true << endl;
  133. cout << "false = " << false << endl << endl << endl;
  134.  
  135. cout << endl << "object A befor C=A+B" << endl;
  136. A.Function_Show();
  137. cout << endl << "object B befor C=A+B" << endl;
  138. B.Function_Show();
  139. cout << endl << "object C befor C=A+B" << endl;
  140. C.Function_Show();
  141. cout << "A PLUS B IS" << endl;
  142. C = A + B;
  143. cout << endl << "object A after C=A+B" << endl;
  144. A.Function_Show();
  145. cout << endl << "object B after C=A+B" << endl;
  146. B.Function_Show();
  147. cout << endl << "object C after C=A+B" << endl;
  148. C.Function_Show();
  149.  
  150. return 0;
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement