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