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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vladislav_
4 / 4 / 0
Регистрация: 25.06.2013
Сообщений: 9
#1

Оператор индексирования [] С++ - C++

26.10.2013, 03:41. Просмотров 502. Ответов 6
Метки нет (Все метки)

Я перегрузил оператор индексирования таким образом:
C++
1
 float* operator[] (unsigned int i){return arr[i];}
я не уверен в том что я корректно его перегрузил...
И у меня есть перегруженный оператор суммирования, определенный вне класса:
C++
1
2
3
4
5
6
7
8
FMATRIX& operator+ (FMATRIX &a, FMATRIX &b){
    if (a.GetCol() != b.GetCol() || a.GetRow() != b.GetRow()) return a;
    FMATRIX *temp = new FMATRIX(a.GetCol(), a.GetRow());
    for (unsigned int i = 0; i < a.GetCol(); i++)
        for (unsigned int j = 0; j < a.GetRow(); j++)
            *temp[i][j] = a[i][j] + b[i][j];
    return *temp;
}
Проблема в том что когда я пишу так: temp->operator[](i)[j] = a[i][j] + b[i][j]; то у меня все работает норм! Но когда я хочу записать таким образом его: *temp[i][j] = a[i][j] + b[i][j]; то прога хоть и компилируется но потом на каком то этапе исполнения выбивает ошибку:
- this 0x0080789c {arr=0xfdfdfdfd _col=2880154539 _row=2880154539 } FMATRIX * const
- arr 0xfdfdfdfd float * *
CXX0030: ошибка: невозможно вычислить выражение

КАК ИСПРАВИТЬ, ЧТО БЫ МОЖНО БЫЛО записывать как в моем примере перегрузки оператора+ который выше.
или что вообще нужно изменить что бы этот оператор конкретно работал??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 03:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор индексирования [] С++ (C++):

Оператор индексирования как утилита - C++
Нужно сделать оператор индексирования (operator) утилитой, тоесть вне класа. Не знаю зачем пока, но сделать надо. Можете мне объяснить...

Односвязный список и оператор индексирования [] - C++
Помогите разобраться, как сделать оператор доступа по индексу для односвязного спика. Объявление: class TMyObject() { }; ...

Класс для работы с матрицами - Что дает перегруженный оператор индексирования? - C++
Есть работающая программа, которая имеет: конструктор с параметрами, который заполняет матрицу псевдослучайными числами конструктор...

перегрузка индексирования - C++
на пример как перегрузить оператор индексирования с 2-мя параметрами: f

Перегрузка оператора индексирования - C++
Всем привет! Ситуация такая - есть 2 класса, поле одного класса является массивом из элементов второго класса. Необходимо переопределить...

Перегрузка оператора индексирования - C++
Собсно код с книжки списал. Понятно что данный класс на векторе построен (понятно, что можно на основе любого контейнера зафигачить),...

6
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 04:20 #2
Vladislav_, а зачем вообще создавать матрицу динамически? почему бы не так
C++
1
FMATRIX temp(a.GetCol(), a.GetRow());
И возвращать из сложения не ссылку на матрицу, а объект
1
Vladislav_
4 / 4 / 0
Регистрация: 25.06.2013
Сообщений: 9
26.10.2013, 17:15  [ТС] #3
Я не могу понять, если я возвращаю как значение то у меня выбивает эту же ошибку при выводе cout << a+a;
C++
1
2
3
4
5
6
7
8
9
ostream& operator<< (ostream& out, FMATRIX& obj){
    for (unsigned int i = 0; i < obj.GetCol(); i++)
    {
        for (unsigned int j = 0; j < obj.GetRow(); j++)
            out << obj[i][j] << "\t";
        out << "\n";
    }
    return out;
}
А когда пишу возврат через ссылку и присваиваю элементу значение таким образом: temp->operator[](i)[j] = a[i][j] + b[i][j]; - то все работает без ошибок....
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 23:01 #4
Vladislav_, возвращать через ссылку вообще не вариант - оператор сложения должен возвращать новый объект. Именно объект, а не ссылку на непонятно как созданное и непонятно когда и как удаляемое нечто.
Конструктор копирования есть? И вообще хотелось бы глянуть на код класса FMATRIX. По возможности, чтобы там были только необходимые методы, а не сотни строк кода)
0
Vladislav_
4 / 4 / 0
Регистрация: 25.06.2013
Сообщений: 9
26.10.2013, 23:19  [ТС] #5
Просто єто задание на лабу с ООП и мне надо перегрузить все что только можно но там еще и половины не реализовано(
а конструктор копии я не переопределял.
0
Вложения
Тип файла: rar LR5_zz1.rar (1.7 Кб, 4 просмотров)
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 23:52 #6
Vladislav_, добавьте конструктор копии, о котором я говорил выше, и все заработает.
Примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FMATRIX::FMATRIX(const FMATRIX& i_matrix)
{
    _col = i_matrix._col;
    _row = i_matrix._row;
 
    arr = new float *[_col];
 
    for (unsigned int i = 0; i < _col; ++i)
    {
        arr[i] = new float[_row];
        for (unsigned int j = 0; j < _row; ++j) {
            arr[i][j] = i_matrix.arr[i][j];
        }
    }
}
1
Vladislav_
4 / 4 / 0
Регистрация: 25.06.2013
Сообщений: 9
27.10.2013, 00:31  [ТС] #7
Спасибо огромное))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 00:31
Привет! Вот еще темы с ответами:

Перегрузка оператора индексирования - C++
Что-то не выходит каменный цветок. Определение класса: struct TEventData { char strComputerName; }; class TEventDataSet { ...

Перегрузка индексирования строками - C++
Пишу динамический массив, состоящий из строк. Возможно ли перегрузить оператор индексирования для строк? Т.е. чтобы можно было писать не...

Аналог перегрузки оператора индексирования (operator []) - C++
Как по-другому(то есть в виде обычной функции или как то ещё) можно записать перегрузку оператора индексирования? Например в моём случае:...

Перегрузка операции индексирования, вопрос по синтаксису - C++
Здравствуйте форумчане. Должна сразу сказать, что в своей практике с С++ сталкивалась мало, поэтому в нем считаю себя новичком. Но все же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
27.10.2013, 00:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru