Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 20.02.2020
Сообщений: 8

Перегрузка оператора []

12.11.2020, 16:01. Показов 5713. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, можете обьяснить , пожалуйста. Смотрите , у меня есть класс матрица , в нем три поля , первое - это количество строк матрицы , второе поля - количество столбцов и третье поле - double * Matrix ; , матрица у меня хранится в одномерном массиве . Я не понимаю одного , зачем мне реализовать перегрузку операторов индексирования [] в отдельном классе ( обязательное условие ) может кто обьяснить ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2020, 16:01
Ответы с готовыми решениями:

Перегрузка оператора
Привет, форумчане. Есть простой класс, в котором перегружается оператор '==' : #ifndef POINT_H #define POINT_H class point{ ...

Перегрузка оператора ++
Что делает оператор ++ при его перегрузке?

Перегрузка оператора []
Есть код перегрузки оператора для получения данных из массива. #include <iostream> class obj { private: int *arr; ...

35
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.11.2020, 16:10
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Zirak Посмотреть сообщение
У диалогов в интернете есть прекрасная отличительная особенность: из него можно в любой момент времени выйти, и ничего страшного при этом не случится.
Хотите сказать, что жлобс плохие манеры равномерно распределены по сети и не нужно следить за диалогом? Чем дальше, тем интереснее. Но если уж исходить из того, что каждый вправе сказать так, как ему свойственно, то именно это я и делаю.
А право воспользоваться особенностью, которую вы сочли главной (прекрасной и даже отличительной(!)), что уже и не удивляет :
Цитата Сообщение от Zirak Посмотреть сообщение
У диалогов в интернете есть прекрасная отличительная особенность: из него можно в любой момент времени выйти, и ничего страшного при этом не случится.
оставьте себе.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.11.2020, 00:12
Цитата Сообщение от Zirak Посмотреть сообщение
Избавление от if'a - не значимая оптимизация?
в твоём случае - это писсимизация.

Цитата Сообщение от Zirak Посмотреть сообщение
Зачем все сложности с проверками диапозона
причем, это - писсимизация человека, который не понимает,
зачем лестницам нужны перила,
автомобилям - падушки безопасности,
а атомным станциям - кнопка аварийного останова.

и, похоже, ты не знаешь в чем разница между "оптимизацией" и "писсимизацией".
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
14.11.2020, 18:59
Цитата Сообщение от hoggy Посмотреть сообщение
Цитата Сообщение от IGPIGP Посмотреть сообщение
и не нужно следить за диалогом?
Я слежу за диалогом, и говорю ровно то, что хочу сказать. Угодить всем и каждому цели у меня нет.

Цитата Сообщение от hoggy Посмотреть сообщение
это писсимизация.
пЕссимизация.

Цитата Сообщение от hoggy Посмотреть сообщение
и, похоже, ты не знаешь в чем разница между "оптимизацией" и "писсимизацией".
Когда ждать пропозал чтобы operator[] у вектора, например, переделали в то, что сейчас из себя представляет at()? Безопасно же.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.11.2020, 19:02
Цитата Сообщение от Zirak Посмотреть сообщение
Я слежу за диалогом, и говорю ровно то, что хочу сказать. Угодить всем и каждому цели у меня нет.
Чацкого не получится. И горя от ума тоже.
0
14.11.2020, 19:07

Не по теме:

Неплохое сравнение, но слишком поверхностное.

0
14.11.2020, 19:14

Не по теме:

Цитата Сообщение от Zirak Посмотреть сообщение
Когда ждать пропозал чтобы operator[] у вектора, например, переделали в то, что сейчас из себя представляет at()? Безопасно же.
Zirak, а где в коде, до которого вы "докопались", какие-то проверки в операторе[]? Я вот смотрю и не вижу.

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.11.2020, 19:24

Не по теме:

Цитата Сообщение от Zirak Посмотреть сообщение
Неплохое сравнение, но слишком поверхностное.
Дык я же и говорю. Тут до Грибоедова как до Луны. Случай общения на коммунальной кухне с упоминанием господа всуе.



Добавлено через 6 минут
Цитата Сообщение от zayats80888 Посмотреть сообщение
Zirak, а где в коде, до которого вы "докопались", какие-то проверки в операторе[]? Я вот смотрю и не вижу.
zayats80888, тут можно и по теме)
Вопрос же не в С++ профи "Отревьюируйте код и помогите довести до энтерпрайз уровня". Кто читал Стива Макконнелла, - отзовитесь!
Не-а. Человек положил код. А другой -"та ради бога!". Ни уму ни сердцу. Но главное не это. Ни кто не без грешен. Погода, настроение, занос. Но какова реакция на корректное замечание по делу!
А что касается кода, то как по мне, - занимательно. Я бы сделал неконстантную версию и вернул её вызов из константной. Но ради разнообразия - было интересно.
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
14.11.2020, 19:31

Не по теме:

zayats80888, я не "докопывался" до кода operator[]

Цитата Сообщение от IGPIGP Посмотреть сообщение
с упоминанием господа всуе.
Ничего страшного в этом нет.



Цитата Сообщение от IGPIGP Посмотреть сообщение
Ни уму ни сердцу.
Ну почему же. Я же писал, что не понимаю, зачем автор кода добавил конст-кастов, а в ответ на это он мне сказал, что, мол, нужны версии, возвращающие const-ссылку и обычную. Но это не ответ на вопрос. Оттуда и такая реакция, с отправкой чуть изменённого кода, который теперь работает "как принято" и всё тот же вопрос следом. "Ради бога:" это как синоним "пожалуйста:", "хорошо, вот:" и тому подобных выражений, совершенно нейтральных.
0
14.11.2020, 19:48

Не по теме:

IGPIGP, извиняюсь, но я немного "тугодум", в плане распознавания скрытых смыслов за абстрактными фразами. Я предпочитаю, когда мне всё по полочкам.

так что, как-то так...

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.11.2020, 19:51
Цитата Сообщение от Zirak Посмотреть сообщение
nalbe666, ради бога:
C++
1
2
3
4
5
6
const T& operator()(const size_t& i, const size_t& j) const {
 return pData[mCols * i + j];
 }
T& operator()(size_t i, size_t j) {
 return pData[mCols * i + j];
 }
Зачем все сложности с проверками диапозона, кастами и повторными вызовами?
Когда спор, лучше выражаться однозначней. Или объяснить (уточнить) что это была попытка вежливого "пожалуйста, извольте взглянуть".
Zirak, оба оператора делают некоторые вычисления в наборе операций. Возможно, полагаясь на встраивание было бы уместно оставить одну реализацию:
C++
1
2
3
4
5
6
7
T& operator()(size_t i, size_t j) {
 return pData[mCols * i + j];
 
const T& operator()(const size_t& i, const size_t& j) const {
return this->operator[](i);
}
 }
Допустим. Но это не столь принципиально ведь. В моём варианте сразу используется индексное обращение к скрытому массиву. И то может быть луче бы для единообразия и с учётом того что код может жить и изменяться - оставить одну реализацию, а вторую заставить использовать первую.
Но обсуждение данных частностей захламляет тему. Вопрос задан. Человек написал код потратив время и силы. Тут ни кто не гарантирует идеальных решений. Они и не нужны. Цель - образовательная. Что -то можно сделать лучше - положите свой код. Напишите "Я так увидел" или "Как вариант" или ещё как-то.
А вот так-
nalbe666, ради бога:
Зачем все сложности с проверками диапозона, кастами и повторными вызовами?
иметь то что имеем. И первый пост - цитата кода и свой вариант с коментарием в виде -_- тоже из той же оперы. Если вы оспариваете решение, почему не спросить в человеческих выражениях?
Zirak, ваш уровень не вызывает сомнений ни в вопросах кодинга ни в вопросах этики. Я не думаю, мне что нужно вам что-то объяснять. Давайте просто остановимся.
Zirak, nalbe666, и
Остальное, обсуждаемо
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
14.11.2020, 20:58
Меня больше интересует не вопрос вежливости, а настырные попытки навязать мне какую-то там "оптимизацию" на пять копеек.
Цитата Сообщение от Zirak Посмотреть сообщение
Как лично ты для себя/для своего работодателя пишешь код мне не интересно, но когда что-то такое советуется новичкам, то я сразу же напишу, что он говно и неоптимальный, если он действительно говно и неоптимальный (насколько я смогу судить, разумеется).
Ты немного перепутал. Правильно будет так: твоё мнение мне не интересно и я сам разберусь, что советовать новичкам. Ты мне тут не начальник.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.11.2020, 21:25
Цитата Сообщение от Zirak Посмотреть сообщение
Когда ждать пропозал чтобы operator[] у вектора, например, переделали в то, что сейчас из себя представляет at()? Безопасно же.
assert ? не, не слышал.


зы:
метод at не нужен.
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
15.11.2020, 02:43

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
ваш уровень не вызывает сомнений
Мой уровень вызывает очень много сомнений, с какой стороны на него не посмотреть :D



Цитата Сообщение от nalbe666 Посмотреть сообщение
Ты мне тут не начальник.
И не пытался им быть, но комментировать очевидные проблемы в том, что ты (и кто-либо другой) пишешь, буду.

Цитата Сообщение от hoggy Посмотреть сообщение
assert ? не, не слышал.
Но ведь в коде, который я комментировал, нет никаких ассертов. Там самая обычная проверка, которая останется и в релизной версии.

Цитата Сообщение от hoggy Посмотреть сообщение
метод at не нужен.
Ну да, но тот код, который я комментировал, по сути, именно что метод at() по смыслу выполняемых им операций.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
15.11.2020, 09:50
Цитата Сообщение от Zirak Посмотреть сообщение
комментировать очевидные проблемы
Не знать, когда нужно возвращать по значению, а когда по ссылке (как в сообщении 8) - вот что значит "очевидная проблема". А байки про растрату ресурсов на if условие в этом куске кода просто смешны. Ты или тролль, или одарён каким-то альтернативным мышлением. В любом случае твои потуги доказать мне свою правоту не возымеют успеха.
0
15.11.2020, 10:55

Не по теме:

Цитата Сообщение от Zirak Посмотреть сообщение
Мой уровень вызывает очень много сомнений, с какой стороны на него не посмотреть :D
На всякого мудреца довольно простоты. Я имел ввиду уровень в контексте необходимости объяснять то, что вам по всей очевидности понятно.
Zirak, поскольку бой продолжается, я займусь своими делами. Посеешь ветер - пожнёшь бурю. Посеешь злые ветры - пожнёшь злые бури. Мне жаль. Но что тут поделаешь... (многоточие а не вопрос т.к. риторика).

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.11.2020, 11:13
Цитата Сообщение от Zirak Посмотреть сообщение
тот код, который я комментировал, по сути, именно что метод at() по смыслу выполняемых им операций
at не нужен, если есть достаточно безопасный operator[]
(примечание: стандартом не гарантируется безопасность operator[]).

в коде, который ты комментировал, отсутствует метод at
а метод operator[] ты решил сделать не безопасным.
назвав это "оптимизацией"

Цитата Сообщение от Zirak Посмотреть сообщение
Но ведь в коде, который я комментировал, нет никаких ассертов. Там самая обычная проверка, которая останется и в релизной версии.
"обычная проверка" - лучше, чем вообще ничего.

ты когда маленький был, тебе папа разве не рассказывал,
что нельзя экономить на собственном здоровье?

мне рассказывал
я на школьных обедах "оптимизировал".
ходил голодным, а деньги откладывал в копилку.
папа когда узнал, сказал: когда ты заработаешь язву желудка,
потратишь в разы больше на лечение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2020, 11:13

Перегрузка оператора <<
Хочу реализовать возможность вывода элемента массива в main. Для этого так понимаю нужно перегрузить оператор &lt;&lt;. С справился,...

Перегрузка оператора
#include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace std; class station { public: ...

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

Перегрузка оператора=
Есть класс class Point { double x; double y; public: Point(double x = 0, double y = 0) : x(x), y(y) {} double getX()...

Перегрузка оператора
#include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace std; class station { public: ...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru