Не соображу что не так при перегрузке оператора =...
От: Vulko http://kvolkov.com
Дата: 17.05.05 18:13
Оценка:
Заранее прошу не тереть модеров тему. Хоть и я пишу всё на C++, но в данном случае разницы нету никакой. На дельфи всё почти также.

Есть класс динамической матрицы. Пишу перегрузку оператора =, чтобы можно было легко присваивать матрицы.

В итоге присвоения не происходит. Хоть убей, не пойму что не так в алгоритме присваивания...


 class Array2D
  {
    double **base;
    int columnSize;
    int rowSize;
   public:
    Array2D(int arrayColumnSize, int arrayRowSize); //Êîíñòðóêòîð
    ~Array2D(); //Äåñòðóêòîð
    void push(int, int, double psh); // Ââîä
    double pop(int i, int j); // Âûâîä
    void GetSize(int &n, int &m); // Âûâîä ðàçìåðîâ ìàòðèöû
    Array2D &operator=(Array2D &arr);
  };

// Êîíñòðóêòîð îáúåêòîâ êëàññà
  Array2D::Array2D(int arrayColumnSize, int arrayRowSize)
   {
    base = new double*[arrayColumnSize];
     for ( int i = 0; i < arrayColumnSize; ++i )
      base[i] = new double[arrayRowSize];
    rowSize = arrayRowSize;
    columnSize = arrayColumnSize;
     for ( int i = 0; i < columnSize; ++i )
      for ( int j = 0; j < rowSize; ++j )
       base[i][j] = 0;
   }

// Äåñòðóêòîð îáúåêòîâ êëàññà
  Array2D::~Array2D()
   {
    for ( int i = 0; i < columnSize; ++i )
     delete[] base[i];
    delete[] base;
   }

// Ââîä [i, j]-òîãî ýëåìåíòà ìàññèâà
  void Array2D::push(int i, int j, double psh)
   {
    base[i][j] = psh;
   }

// Âûâîä [i, j]-òîãî ýëåìåíòà ìàññèâà
  double Array2D::pop(int i, int j)
   {
    return base[i][j];
   }

// Âûâîä ðàçìåðîâ ìàòðèöû
  void Array2D::GetSize(int &n, int &m)
   {
    n = columnSize;
    m = rowSize;;
   }

// присваивание
  Array2D &Array2D::operator=(Array2D &arr)
   {
    int i, j, k, l;
    this -> GetSize(i, j);
    arr.GetSize(k, l);
    if (i != k)
     if (j != l)
      for (i = 0; i < k; i++)
       for (j = 0; j < l; j++)
        this -> push( i, j, arr.pop(i, j) );
    return *this;
   }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.