Classes and class hierarchies
C.163
Перегружайте только операции, которые примерно эквивалентны
Причина
Использование одного и того же имени для логически различных функций сбивает с толку и приводит к ошибкам при использовании обобщённого программирования.
Пример
Рассмотрим:
void open_gate(Gate& g); // убираем препятствие на выезде из гаража
void fopen(const char* name, const char* mode); // открываем файл
Две операции фундаментально различны (и не связаны), поэтому хорошо, что их имена различаются. Напротив:
void open(Gate& g); // убираем препятствие на выезде из гаража
void open(const char* name, const char* mode ="r"); // открываем файл
Две операции по-прежнему фундаментально различны (и не связаны), но имена сведены к их (общему) минимуму, что создаёт возможности для путаницы. К счастью, система типов поймает многие такие ошибки.
Примечание
Будьте особенно осторожны с распространёнными и популярными именами, такими как open, move, + и ==.
Контроль
???