avr39ripe

cppArrOperator[]

Mar 30th, 2021
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <cassert>
  3.  
  4. class DynArray
  5. {
  6.     int* arr;
  7.     int size;
  8. public:
  9.     DynArray(int sizeP)
  10.         : arr{ new int[sizeP] {} }, size{ sizeP }
  11.     {
  12.         std::cout << "DynArr constructed for " << size
  13.             << " elements, for " << this << '\n';
  14.     }
  15.     DynArray() : DynArray(5) {}
  16.     DynArray(DynArray& object) = delete;
  17.     DynArray& operator=(DynArray& object) = delete;
  18.     DynArray(DynArray&& object)
  19.         : arr{ object.arr }, size{ object.size }
  20.     {
  21.         object.arr = nullptr;
  22.         object.size = 0;
  23.         std::cout << "DynArr move constructed for "
  24.             << size << " elements, for " << this
  25.             << '\n';
  26.     }
  27.     DynArray& operator=(DynArray&& object)
  28.     {
  29.         if (!(this == &object))
  30.         {
  31.             delete arr;
  32.  
  33.             arr = object.arr;
  34.             size = object.size;
  35.  
  36.             object.arr = nullptr;
  37.             object.size = 0;
  38.  
  39.         }
  40.         std::cout << "DynArr move assigned for "
  41.             << size << " elements, for " << this
  42.             << '\n';
  43.  
  44.         return *this;
  45.     }
  46.     // константная перегрузка, возвращающая элемент по значению
  47.     int operator[](int idx)const
  48.     {
  49.         assert(idx >= 0 and idx < size and "Index is out of range!");
  50.         return arr[idx];
  51.     }
  52.     // не константная перегрузка, возвращающая элемент по ссылке
  53.     int& operator[](int idx)
  54.     {
  55.         assert(idx >= 0 and idx < size and "Index is out of range!");
  56.         return arr[idx];
  57.     }
  58.     void print()const;
  59.     void randomize();
  60.     ~DynArray()
  61.     {
  62.         std::cout << "Try to free memory from DynArray for "
  63.             << arr << " pointer\n";
  64.         delete[] arr;
  65.         std::cout << "DynArr destructed for " << size
  66.             << " elements, for " << this << '\n';
  67.     }
  68. };
  69. void DynArray::print()const
  70. {
  71.     for (int i{ 0 }; i < size; ++i)
  72.     {
  73.         std::cout << arr[i] << ' ';
  74.     }
  75.     std::cout << '\n';
  76. }
  77. void DynArray::randomize()
  78. {
  79.     for (int i{ 0 }; i < size; ++i)
  80.     {
  81.         arr[i] = rand() % 10;
  82.     }
  83. }
  84.  
  85. DynArray arrayFactory(int arrSize)
  86. {
  87.     DynArray arr{ arrSize };
  88.     arr.randomize();
  89.     return arr;
  90. }
  91.  
  92. int main()
  93. {
  94.     const int arrSize{ 10 };
  95.     DynArray ar1{ arrayFactory(arrSize) };
  96.     std::cout << "ar1 elements : ";
  97.     ar1.print();
  98.    
  99.     std::cout << "\nChange every ar1 element to its square:\n";
  100.     for (int i{ 0 }; i < arrSize; ++i)
  101.     {
  102.         ar1[i] *= ar1[i];
  103.         std::cout << "ar1[" << i << "] = " << ar1[i] << '\n';
  104.     }
  105.  
  106.     const DynArray ar2{ arrayFactory(arrSize) };
  107.     std::cout << "ar2 elements :\n";
  108.     for (int i{ 0 }; i < arrSize; ++i)
  109.     {
  110.         std::cout << "ar2[" << i << "] = " << ar2[i] << '\n';
  111.     }
  112.  
  113.     return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment