Форум программистов, компьютерный форум CyberForum.ru

Переопределение операций - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
_lacrimosa_
1 / 1 / 0
Регистрация: 10.06.2010
Сообщений: 26
31.08.2010, 16:13     Переопределение операций #1
Ситуация такая. В классе матриц переопределён оператор взятия индекса:

C++
1
float operator() (int row, int column) const;
Сами данные (элементы матрицы) хранятся в виде одномерного массива, поэтому для простоты нужен этот оператор.

В переопределении операции сложения хочу сделать так:
C++
1
result(i,j) = A(i,j)+B(i,j);
Значит необходим оператор, который записывает некоторое число в элемент (i,j) матрицы, условно говоря такой: (int i, int j)=

Реально ли такое сделать? - чтобы избежать такого нечитаемого куска кода:
C++
1
2
float p = A(i,j)+B(i,j);
result.PutElem(i,j,p);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2010, 16:13     Переопределение операций
Посмотрите здесь:

Переопределение операций - значки C++
Переопределение операций C++
C++ Переопределение операций
C++ Переопределение операций со строками
Переопределение операций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.08.2010, 16:21     Переопределение операций #2
C++
1
2
3
float& operator() (int row, int column);
// ...
A(i,j) = B(i,j);
Но вообще более принято перегружать operator[] или использовать метод под именем at().
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.08.2010, 17:46     Переопределение операций #3
fasked, [] не перегрузить для двух параметров, не используя дополнительного класса =)
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
31.08.2010, 17:47     Переопределение операций #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
[] не перегрузить для двух параметров, не используя дополнительного класса
забыл добавить перегружать operator[] два раза
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.09.2010, 12:06     Переопределение операций #5
_lacrimosa_, надо добавить один класс, который будет представлять строку или столбец, и перегрузить для него оператор взятия индекса, а потом уже на его основе строить класс матрицы. А в классе матрицы сделай так, чтобы оператор взятия индекса возвращал ссылку на строку (или на столбец).
Вот здесь можешь посмотреть пример, если надо.
Yandex
Объявления
01.09.2010, 12:06     Переопределение операций
Ответ Создать тему
Опции темы

Текущее время: 04:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru