Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

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

Перегрузить оператор []-не сложно. Но что делать, если мне нужен двумерный массив? Как перегрузить оператор [][]? Если я пишу [] с 2 параметрами-ругается. Если пишу [][] -ругается ( error C2092: тип элемента массива "[]" не может быть функцией) вот как я объявляю: double& operator [][] (const int i, const int j);


Ответ

Вы не первый, кого интересует эта проблема; этот вопрос даже попал в своё время в официальный список часто задаваемых вопросов по С++.
Знаменитый C++ FAQ советует использовать operator ()
Используйте operator(), а не operator[] Если у вас многомерный массив, наиболее чистое решение -- использовать operator(), а не operator[]. Причина в том, что operator[] всегда принимает один параметр, в то время как operator() принимает любое их количество (в случае прямоугольной матрицы, вам нужно два).
Вот здесь и здесь объяснение, почему круглые скобки лучше двух пар квадратных.
Краткое резюме:
квадратные скобки требуют создания промежуточного объекта, представляющего строку таблицы, что накладывает ограничение на физическое расположение данных в основном классе. круглые скобки очевидно ни при каких условиях не хуже, а иногда лучше использование нативного для С++ синтаксиса лучше проверка входных параметров проще, что улучшает качество кода

Комментариев нет:

Отправить комментарий