Advertisement
avr39ripe

PV913CopyConstructors

May 26th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.84 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.     int getElem(int idx) { return arr[idx]; };
  12.     void setElem(int idx, int val) { arr[idx] = val; };
  13.     void print();
  14.     void randomize();
  15.     ~DynArray() { if (arr) { std::cout << "this->arr = " << this->arr << '\n'; delete[] arr; }; std::cout << "DynArr destructed for " << size << " elements, for " << this << '\n'; };
  16. };
  17.  
  18. void DynArray::print()
  19. {
  20.     for (int i{ 0 }; i < size; ++i)
  21.     {
  22.         std::cout << arr[i] << ' ';
  23.     }
  24.     std::cout << '\n';
  25. }
  26.  
  27. void DynArray::randomize()
  28. {
  29.     for (int i{ 0 }; i < size; ++i)
  30.     {
  31.         arr[i]=rand()%10;
  32.     }
  33. }
  34.  
  35. DynArray::DynArray(const DynArray& obj)
  36.     : arr{ new int[obj.size] {} }, size{ obj.size }
  37. {
  38.     for (int i{ 0 }; i < size; ++i)
  39.     {
  40.         arr[i] = obj.arr[i];
  41.     };
  42.  
  43.     std::cout << "DynArr COPY constructed for " << size << " elements, for " << this << '\n';
  44. };
  45.  
  46. class Fraction
  47. {
  48.     int numerator;
  49.     int denominator;
  50. public:
  51.     Fraction(const Fraction& fract) : numerator{ fract.numerator }, denominator{fract.denominator} { std::cout << "Fraction COPY constructed for " << this << '\n'; };
  52.     Fraction(int num, int denom) : numerator{ num }, denominator{ denom ? denom : 1 } { std::cout << "Fraction constructed for " << this << '\n'; };
  53.     Fraction() : Fraction(1, 1) {};
  54.     ~Fraction() { std::cout << "Fraction destructed for " << this << '\n'; };
  55.     void setNumerator(int num) { numerator = num; };
  56.     int getNumerator() { return numerator; };
  57.     void setDenominator(int denom) { denominator = denom ? denom : 1; };
  58.     int getDenominator() { return denominator; };
  59.     void print();
  60.     Fraction& mul(const Fraction fract) { numerator *= fract.numerator; denominator *= fract.denominator; return *this; };
  61.     Fraction& mul(int num) { numerator *= num; return *this; };
  62.     Fraction& div(const Fraction fract) { numerator *= fract.denominator; denominator *= fract.numerator; return *this; };
  63.     Fraction& div(int num) { denominator *= num; return *this; };
  64. };
  65.  
  66. void Fraction::print()
  67. {
  68.     std::cout << '(' << numerator << " / " << denominator << ")";
  69. };
  70.  
  71. //void foo(int& ref)
  72. //{
  73. //    int val;
  74. //    ref = 0;
  75. //    std::cout << ref++ << '\n';
  76. //}
  77.  
  78.  
  79. int main()
  80. {
  81.     //char* const str{ new char[14] {"Hello, world"} };
  82.     //char* const str1{ new char[14] };
  83.  
  84.     //char* src{ str };
  85.     //char* dest{ str1 };
  86.  
  87.     //while( *src)
  88.     //{
  89.     //    *dest++ = *src++;
  90.     //}
  91.     //*dest = '\0';
  92.  
  93.     //std::cout << str << '\n' << str1 << '\n';
  94.  
  95.     //str1[0] = '#';
  96.  
  97.     //std::cout << str << '\n' << str1 << '\n';
  98.     //std::cout << (void*)str << '\n' << (void*)str1 << '\n';
  99.  
  100.     //delete[] str1;
  101.     //delete[] str;
  102.     //return 0;
  103.  
  104.     DynArray arr1; //arr1.arr //arr1.size <- this = &arr1
  105.     arr1.print();
  106.     arr1.randomize();
  107.     std::cout << "arr1\n";
  108.     arr1.print();
  109.  
  110.     DynArray arr2{arr1}; //arr2.arr <= arr1.arr //arr2.size <= arr1.size <- this = &arr2
  111.  
  112.     std::cout << "arr2\n";
  113.     arr2.print();
  114.     arr2.setElem(0, 333);
  115.  
  116.     std::cout << "arr1\n";
  117.     arr1.print();
  118.     std::cout << "arr2\n";
  119.     arr2.print();
  120.  
  121.     //int x;
  122.     ////int& ref;
  123.     ////ref = x;
  124.     //foo(x);
  125.     //foo(x);
  126.     //std::cout << x << '\n';
  127.  
  128.     //Fraction a{ 1,3 };
  129.     //Fraction b{ 2,5 };
  130.     //Fraction c{a};
  131.  
  132.  
  133.     //a.print(); std::cout << '\n';
  134.     //b.print(); std::cout << '\n';
  135.     //c.print(); std::cout << '\n';
  136.  
  137.     //a.mul(b).mul(b);
  138.     //a.mul(2).mul(2);
  139.     //a.print(); std::cout << '\n';
  140.     //b.print(); std::cout << '\n';
  141.     //b.div(4);
  142.     //b.print(); std::cout << '\n';
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement