Принципы ООП. Интерфейс

95
08 января 2022, 06:50

Пишу класс для работы с матрицами. Указатель и кол-во строк и столбцов сокрыто, это понятно. Пришла в голову мысль, что можно для доступа к элементу матрицы возвращать ссылку (m[i][j]), а если пользователь запросит несуществующий элемент, вернуть затычку и сгенерировать исключение. Но у меня сомнения по поводу того, насколько нормальна такая практика? У кого есть опыт работы с ООП, хочется услышать ваше мнение.

Для наглядности, по моей задумке можно будет делать так mtrx.get(i,j) = value.

Answer 1

Возвращать нужно уметь две ссылки, константную и неконстантную. И да, это правильная практика.

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

Учтите, что стандартная библиотека C++ в операции [] не проверяет индексы у контейнеров-массивов, и для снижения WTF/seс будет лучше этому правилу следовать - иначе ваш класс матриц будет лютой черепахой, и вызывать у читателя кода справедливое негодование ("какого черта индекс швыряет исключения?!").

Если вы пишете с надеждой написать что-то быстрое (догнать и перегнать MKL!), то исключения вам придется вырубить совсем, опциями компилятора.