Чтобы использовать []
в качестве lvalue, ваш перегруженный []
должен вернуться по ссылке.
Можно ли вернуть ссылку на частного участника?
Да , это прекрасно.
Большинство классов STL делают это, если вы видите STL.
Правило заключается в том, что вы должны возвращать ссылку const
своему частному участнику, если вы не хотите, чтобы пользователь изменял содержимое, или если вы хотите, чтобы пользователи могли изменять его, вы можете вернуть ссылку non const
.
Вы в основном скрываете (Абстрагируете) детали своего класса от пользователя класса, делая их private
, но вы все равно предоставляете функциональность, позволяющую изменять отдельные элементы.