У меня есть тема, в которой я смущен тем, что мне нужно проработать. Перегрузка оператора с помощью версии const и неконстантной версии.
// non-const
double &operator[](int idx) {
if (idx < length && idx >= 0) {
return data[idx];
}
throw BoundsError();
}
Я понимаю, что эта функциональная часть класса, принимает индекс и проверяет его логический, возвращает индекс данных массива в классе. Там также функция с одним и тем же телом, но с вызовом функции как
const double &operator[](int idx) const
Почему нам нужна две версии?
Этот примерный вопрос также может помочь в разработке. Какая версия используется в каждом случае ниже?
Array a(3);
a[0] = 2.0;
a[1] = 3.3;
a[2] = a[0] + a[1];
Моя гипотеза о том, что версия const вызывается только a[2]
, потому что мы не хотим рисковать модификацией a[0]
или a[1]
.
Спасибо за любую помощь.