Поделиться через


Ограничения перегруженных функций

К допустимому набору перегруженных функций применяется несколько ограничений.

  • Любые две функции в наборе перегруженных функций должны иметь разные списки аргументов.

  • Перегрузка функций со списками аргументов одного типа лишь на основании возвращаемого типа недопустима.

    Блок, относящийся только к системам 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] );
    

См. также

Ссылки

Общие сведения о перегрузке