Advertisement
malcin

Untitled

Mar 16th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. template <typename Type>
  2. class Array2D
  3. {
  4. protected:
  5.     Type ** pointer;
  6.     unsigned int sizeY;
  7.     unsigned int sizeX;
  8. public:
  9.    
  10.     class ProxyObject {
  11.         Type * proxyPointer;
  12.     public:
  13.         ProxyObject(Type * pointer) : proxyPointer(pointer) {}
  14.         Type & operator[](int index) {
  15.             return proxyPointer[index];
  16.         }
  17.     };
  18.  
  19.     ProxyObject operator[](int index)
  20.     {
  21.         return ProxyObject(pointer[index]);
  22.     }
  23.  
  24.     Array2D operator=(const Array2D New)
  25.     {
  26.         for (int i = 0; i < sizeY; i++)
  27.             delete[] pointer[i];
  28.         delete[] pointer;
  29.  
  30.         sizeY = New.sizeY;
  31.         sizeX = New.sizeX;
  32.  
  33.         pointer = new Type*[sizeY];
  34.         for (int i = 0; i < sizeY; i++)
  35.             pointer[i] = new Type[sizeX];
  36.  
  37.         for (int i = 0; i < sizeY; i++)
  38.             for (int j = 0; j < sizeX; j++)
  39.                 pointer[i][j] = New.pointer[i][j];
  40.  
  41.         return *this;
  42.     }
  43.  
  44.     unsigned int getSizeY() { return sizeY; }
  45.     unsigned int getSizeX() { return sizeX; }
  46.  
  47.     Array2D(int Y, int X) :
  48.         sizeY(Y), sizeX(X)
  49.     {
  50.         pointer = new Type*[Y];
  51.         for (int i = 0; i < Y; i++)
  52.             pointer[i] = new Type[X];
  53.     }
  54.  
  55.     Array2D(int Y, int X, Type defaultValue) :
  56.         sizeY(Y), sizeX(X)
  57.     {
  58.         pointer = new Type*[Y];
  59.         for (int i = 0; i < Y; i++)
  60.             pointer[i] = new Type[X];
  61.         for (int i = 0; i < Y; i++)
  62.             for (int j = 0; j < X; j++)
  63.                 pointer[i][j] = defaultValue;
  64.     }
  65.  
  66.     ~Array2D()
  67.     {
  68.         for (int i = 0; i < sizeY; i++)
  69.             delete[] pointer[i];
  70.         delete[] pointer;
  71.     }
  72. };
  73.  
  74.  
  75. int main()
  76. {
  77.     Array2D<double> aaa(2, 2);
  78.     aaa[0][0] = 0;
  79.     aaa[0][1] = 0;
  80.     aaa[1][0] = 0;
  81.     aaa[1][1] = 0;
  82.     Array2D<double> bbb(2, 2);
  83.     bbb[0][0] = 1;
  84.     bbb[0][1] = 1;
  85.     bbb[1][0] = 1;
  86.     bbb[1][1] = 1;
  87.    
  88.     /*
  89.         PROBLEM:
  90.         WYWOLANIE aaa/bbb[0][0] (dowolne indeksy) powoduje access violation reading location
  91.         ex.
  92.             std::cout << aaa[0][0];
  93.             std::cout << bbb[0][0];
  94.     */
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement