Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Перегрузка операторов 'operator []' (http://forum.oszone.net/showthread.php?t=136045)

ganselo 27-03-2009 16:53 1076384

Перегрузка операторов 'operator []'
 
Есть класс
Код:

class matr
{
      public:
        matr();
};

Нужно перезагрузить оператор [][] для доступа к элементам матрицы.
Если перезагружать один оператор [], то ни каких проблем. А мне нужен доступ ко всей матрице.
Подскажите как перезагрузить 2 оператора [] для доступа к столбцам и строкам матрицы.

Busla 27-03-2009 17:45 1076440

пере за грузка операторов
[][] - это не многомерный массив, а массив массивов. Т.е. перегружаете [] чтобы он возвращал строку матрицы, второй [] - вернёт из строки матрицы нужное значение.

pva 28-03-2009 10:23 1076994

ещё варианты (если надо всё-таки с матрицей):
Код:

// 1
element& matr::operator()(col, row)
// 2
element& matr::operator[](std::pair<unsigneed,unsigned>)
// 3 ничего не перегружать, держать массив из указателей element*,
// тогда легко менять местами строчки
struct matr
{
  vector<element> _memory;
  vector<element*> _rows;

  element* operator[](unsigned n) {return rows[n];}
  ...
}
// использовать классы прокси
struct matr_proxy1_t
{
  matr& m;
  unsigned arg1;
  matr_proxy1_t(matr&,unsigned);
  element& operator[](unsigned arg2) {return m.get(arg1, arg2);}
}
struct matr
{
  matr_proxy1_t operator[](unsigned arg1) {return matr_proxy1_t(*this,arg1);}
}

а ещё можно воспользоваться уже готовыми классами valarray. Какая задача то стоит?

ganselo 29-03-2009 14:57 1077988

Цитата:

Цитата pva
Какая задача то стоит? »

Задача написать тетрис. Для удобства использования матриц хочу сделать свой класс, который будит содержать методы:
поворот фигуры влево, вправо;
создать новую фигуру и всё такое....

Фигуры хранятся в виде двумерного массива.


Время: 04:42.

Время: 04:42.
© OSzone.net 2001-