Язык программирования C++. Вводный курс


Функции-кандидаты


Функцией-кандидатом называется функция, имеющая то же имя, что и вызванная. Кандидаты отыскиваются двумя способами:

·

объявление функции видимо в точке вызова. В следующем примере

void f();

void f( int );

void f( double, double = 3.4 );

void f( char*, char* );

 

int main() {

   f( 5.6 );   // для разрешения этого вызова есть четыре кандидата

   return 0;

}

все четыре функции f()

удовлетворяют этому условию. Поэтому множество кандидатов содержит четыре элемента;

·                  если тип фактического аргумента объявлен внутри некоторого пространства имен, то функции-члены этого пространства, имеющие то же имя, что и вызванная функция, добавляются в множество кандидатов:

namespace NS {

   class C { /* ... */ };

   void takeC( C& );

}

 

// тип cobj - это класс C, объявленный в пространстве имен NS

NS::C obj;

 

int main() {

                 // в точке вызова не видна ни одна из функций takeC()

   takeC( cobj); // правильно: вызывается NS::takeC( C& ),

                 // потому что аргумент имеет тип NS::C, следовательно,

                 // принимается во внимание функция takeC(),

                 // объявленная в пространстве имен NS

   return 0;

}

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

При идентификации множества перегруженных функций, видимых в точке вызова, применимы уже рассмотренные ранее правила.

Функция, объявленная во вложенной области видимости, скрывает, а не перегружает одноименную функцию во внешней области. В такой ситуации кандидатами будут только функции из во вложенной области, т.е. такие, которые не скрыты при вызове. В следующем примере функциями-кандидатами, видимыми в точке вызова, являются format(double) и format(char*):




Начало  Назад  Вперед