Ограничения перегруженных функций
К допустимому набору перегруженных функций применяется несколько ограничений.
Любые две функции в наборе перегруженных функций должны иметь разные списки аргументов.
Перегрузка функций со списками аргументов одного типа лишь на основании возвращаемого типа недопустима.
Блок, относящийся только к системам Microsoft
Можно перегрузить оператор new только на основании возвращаемого типа, в частности, на основании указанного модификатора модели памяти.
Завершение блока, относящегося только к системам Microsoft
Функции-члены невозможно перегружать исключительно на основании того, что одна из них является статической, а вторая — нестатической.
Объявления typedef не определяют новые типы; они представляют синонимы для существующих типов. Они не влияют на механизм перегрузки. Рассмотрим следующий код.
typedef char * PSTR; void Print( char *szToPrint ); void Print( PSTR szToPrint );
Две указанные выше функции имеют идентичные списки аргументов. PSTR является синонимом типа char *. В области члена этот код возвращает ошибку.
Перечисляемые типы являются отдельными типами и могут использоваться для различения перегруженных функций.
Типы "массив" и "указатель" считаются идентичными при различении перегруженных функций. Это верно только для одномерных массивов. Поэтому следующие перегруженные функции вступают в конфликт и выдают сообщение об ошибке.
void Print( char *szToPrint ); void Print( char szToPrint[] );
В случае многомерных массивов второе и все последующие измерения являются частью типа. Поэтому они используются для различения перегруженных функций.
void Print( char szToPrint[] ); void Print( char szToPrint[][7] ); void Print( char szToPrint[][9][42] );