avr39ripe

PV913DynArrCopyAssigment

Jun 9th, 2020
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class DynArray
  4. {
  5.     int* arr;
  6.     int size;
  7. public:
  8.     DynArray(int pSize) : arr{ new int[pSize] {} }, size{ pSize } {std::cout << "DynArr constructed for " << size << " elements, for " << this << '\n'; };
  9.     DynArray() : DynArray(5) {};
  10.     DynArray(const DynArray& obj);
  11.     DynArray& operator=(const DynArray& obj);
  12.     int getElem(int idx) { return arr[idx]; };
  13.     void setElem(int idx, int val) { arr[idx] = val; };
  14.     void print();
  15.     void randomize();
  16.     ~DynArray() { if (arr) { std::cout << "this->arr = " << this->arr << '\n'; delete[] arr; }; std::cout << "DynArr destructed for " << size << " elements, for " << this << '\n'; };
  17. };
  18.  
  19. void DynArray::print()
  20. {
  21.     for (int i{ 0 }; i < size; ++i)
  22.     {
  23.         std::cout << arr[i] << ' ';
  24.     }
  25.     std::cout << '\n';
  26. }
  27.  
  28. void DynArray::randomize()
  29. {
  30.     for (int i{ 0 }; i < size; ++i)
  31.     {
  32.         arr[i] = rand() % 10;
  33.     }
  34. }
  35.  
  36. DynArray::DynArray(const DynArray& obj)
  37.     : arr{ new int[obj.size] {} }, size{ obj.size }
  38. {
  39.     for (int i{ 0 }; i < size; ++i)
  40.     {
  41.         arr[i] = obj.arr[i];
  42.     };
  43.  
  44.     std::cout << "DynArr COPY constructed for " << size << " elements, for " << this << '\n';
  45. };
  46.  
  47.  
  48. DynArray& DynArray::operator=(const DynArray& obj)
  49. {
  50.     if (this == &obj)
  51.     {
  52.         std::cout << "DynArr self assign PREVENTED! for " << this << '\n';
  53.         return *this;
  54.     }
  55.  
  56.     delete[] arr;
  57.  
  58.     arr = new int[obj.size]{};
  59.     size = obj.size;
  60.  
  61.     for (int i{ 0 }; i < size; ++i)
  62.     {
  63.         arr[i] = obj.arr[i];
  64.     };
  65.  
  66.     std::cout << "DynArr COPY assigned for " << size << " elements, for " << this << '\n';
  67.     return *this;
  68. };
  69.  
  70.  
  71.  
  72. void printDynArrEl(DynArray& arr, int idx)
  73. {
  74.     std::cout << arr.getElem(idx) << ' ';
  75. }
  76.  
  77.  
  78. /*DynArray mkArray(int size)
  79. {
  80.     DynArray arr{ size };
  81.     arr.randomize();
  82.     return arr;
  83. }*/
  84.  
  85.  
  86.  
  87.  
  88. int main()
  89. {
  90.     //int x{ 42 };
  91.     //x = x;
  92.  
  93.     //std::cout << "X = " << x << '\n';
  94.     //return 0;
  95.  
  96.     std::cout << "arr1 creation\n";
  97.     DynArray arr1{8};
  98.     arr1.print();
  99.     arr1.randomize();
  100.     arr1.print();
  101.     std::cout << "arr2 creation\n";
  102.     DynArray arr2{};
  103.     arr2.randomize();
  104.     arr2.print();
  105.     arr2 = arr1; // { arr2.arr = arr1.arr; arr2.size = arr1.size; }
  106.     arr2.print();
  107.  
  108.  
  109.     //arr1 = 'A';
  110.  
  111.     //arr1.print();
  112.     //arr1.randomize();
  113.     //std::cout << "arr1\n";
  114.     //arr1.print();
  115.  
  116.     //DynArray arr2.{arr1}; //arr2.arr <= arr1.arr //arr2.size <= arr1.size <- this = &arr2
  117.  
  118.     //std::cout << "arr2\n";
  119.     //arr2.print();
  120.     //arr2.setElem(0, 333);
  121.  
  122.     //std::cout << "arr1\n";
  123.     //arr1.print();
  124.     //std::cout << "arr2\n";
  125.     //arr2.print();
  126.  
  127.  
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment