Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перегрузка операторов 'operator []'

Ответить
Настройки темы
C/C++ - Перегрузка операторов 'operator []'

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Есть класс
Код: Выделить весь код
class matr
{
      public:
         matr();
};
Нужно перезагрузить оператор [][] для доступа к элементам матрицы.
Если перезагружать один оператор [], то ни каких проблем. А мне нужен доступ ко всей матрице.
Подскажите как перезагрузить 2 оператора [] для доступа к столбцам и строкам матрицы.

Отправлено: 16:53, 27-03-2009

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:45, 27-03-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


ещё варианты (если надо всё-таки с матрицей):
Код: Выделить весь код
// 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. Какая задача то стоит?
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:23, 28-03-2009 | #3


Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


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

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

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 14:57, 29-03-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перегрузка операторов 'operator []'

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
USB-модемы сотовых операторов KamuFLyaZH Мобильные ОС, смартфоны и планшеты 150 20-05-2013 08:42
OperaTor Sharik987 Хочу все знать 5 04-12-2008 12:37
Официальные сайты сотовых операторов в РФ и в мир united Мобильные ОС, смартфоны и планшеты 5 23-07-2008 11:53
Основы C++ | Перегрузка operator+ для m_string Skrip Программирование и базы данных 1 10-08-2005 13:41
С++ | конструктор и operator[] Skrip Программирование и базы данных 10 30-07-2005 19:03




 
Переход