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


Функции-кандидаты - часть 3


libs_R_us::max( int, int );

libs_R_us::max( double, double );

Они и являются кандидатами. Теперь вызовы func() разрешаются следующим образом:

void func()

{

   // using-объявление

   // глобальная функция max( char, char ) скрыта

   using libs_R_us::max;

 

   max( 87, 65 );     // вызывается libs_R_us::max( int, int )

   max( 35.5, 76.6 ); // вызывается libs_R_us::max( double, double )

   max( 'J', 'L' );   // вызывается libs_R_us::max( int, int )

}

Using-директивы также оказывают влияние на состав множества функций-кандидатов. Предположим, мы решили их использовать, чтобы сделать функции max() из пространства имен libs_R_us

видимыми в func(). Если разместить следующую using-директиву в глобальной области видимости, то множество функций-кандидатов будет состоять из глобальной функции max(char, char) и функций max(int, int) и max(double, double), объявленных в libs_R_us:

namespace libs_R_us {

   int max( int, int );

   double max( double, double );

}

 

char max( char, char );

using namespace libs_R_us;  // using-директива

 

void func()

{

   max( 87, 65 );     // вызывается libs_R_us::max( int, int )

   max( 35.5, 76.6 ); // вызывается libs_R_us::max( double, double )

   max( 'J', 'L' );   // вызывается ::max( int, int )

}

Что будет, если поместить using-директиву в локальную область видимости, как в следующем примере?

void func()

{

   // using-директива

   using namespace libs_R_us;

 

   // те же вызовы функций, что и выше

}

Какие из функций max()

окажутся среди кандидатов? Напомним, что using-директива делает члены пространства имен видимыми, словно они были объявлены вне этого пространства, в той точке, где такая директива помещается. В нашем примере члены libs_R_us

видимы в локальной области функции func(), как будто они объявлены вне пространства – в глобальной области. Отсюда следует, что множество перегруженных функций, видимых внутри func(), то же, что и раньше, т.е. включает в себя




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



Книжный магазин