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

Массивы и перегрузки

30.01.2013, 18:12. Показов 772. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть парочка вопросов.
Как объявить указатель на двумерный массив?
На одномерный в таком виде
C++
1
int *ptr = new int [10];
а с двумерным так не получается.

Как перегрузить индексацию двумерного массива?
Если объявлять прототип так
C++
1
int &operator[] (int, int);
то пишет, что слишком много параметров.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2013, 18:12
Ответы с готовыми решениями:

Должен ли хотя бы один из параметров оператора перегрузки был того же типа, что и тип, в котором этот оператор перегрузки определен
A) В зависимости от перегружаемой операции B) Нет C) Да D) В зависимости от типа, в котором...

Перегрузки в C#
Нужны были перегрузки в С#, + – объединить списки (list+list);-- – удалить элемент из начала (типа...

Перегрузки
Помогите пожалуйста написать программу. Описать производный класс, содержащий поле козырь, и...

с++ перегрузки
Нужна помощь с реализацией кода(перегрузка добавления элемента в массив) Полная постановка...

5
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
30.01.2013, 18:22 2
1) Двойной указатель
C++
1
int ** arr;
либо адресную арифметику юзать
2)
C++
1
int * classname::operator[](int);
0
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
31.01.2013, 11:19  [ТС] 3
1) А как теперь задать этому двойному указателю двумерный массив с помощью new?
2)У меня возвращаемое значение ссылка на int, у вас это указатель на int. Больше ничего не поменялось. А мне нужно поменять индексацию двумерного массива. То есть в списке параметров должно быть int, int, а у вас только один int.

Добавлено через 8 минут
1)int **arr = new int [5][5]; не работает
2)А в конечном результате я должен обращаться в таком виде arr[5,5], что эквивалентно arr[5][5].
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
31.01.2013, 11:56 4
1)
C++
1
2
3
4
5
// rows - количество строк, cols - количество столбцов
int **arr;
arr = new int *[rows];
for (int i = 0; i < rows; ++i)
    arr[i] = new int [cols];
2) Когда вы примените оператор индексации к объекту класса - возвратится указатель на массив. Второй оператор индексации применится уже к этому указателю (т.е. применится встроенный в язык оператор индексации) и вернёт конкретный элемент.
2') Вы не можете изменить синтаксис операторов языка. В С++ нет оператора индексации, принимающего два индекса, и при всё желании написать arr[5,5] вы не сможете, вернее, не получите желаемого результата, поскольку сначала выполнится оператор запятая, возвращающая одно-единственное значение, и уже оно будет использовано в качестве индекса.
1
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
31.01.2013, 17:48  [ТС] 5
Второе задание я взял из самоучителя. При этом самоучитель написан недавно и советовал его очень хороший преподаватель.
Возможно я тогда не правильно понял задание. Вот оно
"Прекрасным примером перегрузки операции вызова функции () является возможность более общей формы двойной индексации массива. Перегрузите операцию вызова функции так, чтобы вместо записи массива в виде
C++
1
chessBoard[row][column]
можно было бы записывать альтернативную форму:
C++
1
chessBoard[row,column]
."
Может быть тут имелось ввиду использование фигурных скобочек?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.02.2013, 09:56 6
kebal, не фигурных, круглых. Имелся ввиду такой вариант:
C++
1
chessBoard(row, column);
0
01.02.2013, 09:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2013, 09:56
Помогаю со студенческими работами здесь

Перегрузки
Помогите пожалуйста!!!! Перегрузку оператора – слева объект, справа другой тип данных вроде...

Перегрузки
Изменить программу предыдущей лабораторной работы. Функцию, определяющую бьет ли первая карта...

Перегрузки + и ==
Проблема с перегрузкой оператора + (объединение списков). Списки объединяет, но к первому списку...

Перегрузки (operator+)
Прошу помощи не могу понять как сделать реализацию для этого куска Также добавьте operator+...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru