По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Оператор [] может иметь и несколько вариантов перегрузки для данного класса при условии, что сигнатуры остаются уникальными. Например, одна версия может получать аргумент типа int, а другая - аргумент char*, который преобразуется к int функцией atoi(). Скорее всего, ваша коллекция может индексироваться несколькими способами.
class StringArray {
public:
const String& operator[](int index);
int operator[](const String&);
};
String str = array[17]; // Первая форма
int index = array[String("Hello")]; // Вторая форма
Первый оператор [] реализует семантику массива: по целому индексу возвращается значение элемента с этим индексом. Второй оператор обеспечивает обратную возможность: по значению находится соответствующий индекс массива. В этой схеме используется пара допущений (например, уникальное целое, которое возвращается в качестве индекса несуществующего значения), но в целом идея вполне понятна.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.