Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
4 / 4 / 1
Регистрация: 25.06.2013
Сообщений: 9

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

26.10.2013, 03:41. Показов 2677. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2013, 03:41
Ответы с готовыми решениями:

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

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

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

6
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 04:20
Vladislav_, а зачем вообще создавать матрицу динамически? почему бы не так
C++
1
FMATRIX temp(a.GetCol(), a.GetRow());
И возвращать из сложения не ссылку на матрицу, а объект
1
4 / 4 / 1
Регистрация: 25.06.2013
Сообщений: 9
26.10.2013, 17:15  [ТС]
Я не могу понять, если я возвращаю как значение то у меня выбивает эту же ошибку при выводе 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.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 23:01
Vladislav_, возвращать через ссылку вообще не вариант - оператор сложения должен возвращать новый объект. Именно объект, а не ссылку на непонятно как созданное и непонятно когда и как удаляемое нечто.
Конструктор копирования есть? И вообще хотелось бы глянуть на код класса FMATRIX. По возможности, чтобы там были только необходимые методы, а не сотни строк кода)
0
4 / 4 / 1
Регистрация: 25.06.2013
Сообщений: 9
26.10.2013, 23:19  [ТС]
Просто єто задание на лабу с ООП и мне надо перегрузить все что только можно но там еще и половины не реализовано(
а конструктор копии я не переопределял.
Вложения
Тип файла: rar LR5_zz1.rar (1.7 Кб, 6 просмотров)
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
26.10.2013, 23:52
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
4 / 4 / 1
Регистрация: 25.06.2013
Сообщений: 9
27.10.2013, 00:31  [ТС]
Спасибо огромное))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2013, 00:31
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru