Читаю Страуструпа. Там пример реализации класса String.
| Код |
class String { private: class Cref { friend class String; private: String &s; int i; Cref(String &ss, int ii):s(ss),i(ii){} public: operator char()const{return s.read(i);} void operator = (char c){return s.write(i, c);} };
Srep *rep; public: .... .... void check(int)const; char read(int)const; void write(int, char);
Cref operator[](int ind) { check(ind); return Cref(*this, ind); } char operator[](int ind)const { check(ind); return rep->str[ind]; }; };
|
Не могу понять почему работает это. Почему когда я пишу String s;s[0] = 'a' вызывается Cref operator[](int ind) и зачем тут вообще отдельный класс Cref почему он работает так же как и char&? |