Перегрузка операторов нужна в первую очередь для пользователей класса, а не для разработчиков. Синтаксис может выглядеть непривычно, когда ты его реализуешь, но это дает серьезные преимущества для тех, кто будет использовать твой класс.
Когда ты пишешь класс, ты — один разработчик среди множества потенциальных пользователей. Посмотри на этот компромисс:
Поэтому имеет смысл ставить в приоритет понятность кода для большинства пользователей.
Без перегрузки операторов пользователи писали бы:
Array a;
a.set(3, 4); // Менее интуитивно
int value = a.get(3);
С перегрузкой операторов пользователи пишут:
Array a;
a[3] = 4; // Естественно и интуитивно
int value = a[3];
Да, реализация перегрузки операторов требует смириться с непривычным синтаксисом в определении класса:
class Array {
public:
int& operator[] (unsigned i); // Довольно необычный синтаксис
};
Но это разовые затраты, которые несёт разработчик.
Немного странный синтаксис, с которым приходится иметь дело при реализации, того стоит, потому что он делает опыт пользователя значительно лучше. В мире переиспользования кода оптимизация под опыт пользователей делает весь код по всей кодовой базе понятнее и проще в поддержке.
Помни: ставь интересы большинства выше меньшинства. Твои пользователи оценят интуитивный интерфейс, даже если ради этого тебе пришлось написать менее традиционный код в определении класса.
Перегрузка операторов в первую очередь разработана для того, чтобы помочь разработчику класса, уменьшив количество кода, необходимого в реализации класса.
Новый — ещё не проверен сообществом
Вы