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


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


max( char, char );

libs_R_us::max( int, int );

libs_R_us::max( double, double );

В локальной или глобальной области видимости появляется using-директива, на разрешение вызовов функции func() не влияет:

void func()

{

   using namespace libs_R_us;

 

   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-объявлениями и using-директивами, а также из функций, объявленных в пространствах имен, ассоциированных с типами фактических аргументов. Например:

namespace basicLib {

   int print( int );

   double print( double );

}

namespace matrixLib {

   class matrix { /* ... */ };

   void print( const maxtrix & );

}

void display()

{

   using basicLib::print;

 

   matrixLib::matrix mObj;

   print( mObj );   // вызывается maxtrixLib::print( const maxtrix & )

 

   print( 87 );     // вызывается basicLib::print( const maxtrix & )

}

Кандидатами для print(mObj)

являются введенные using-объявлением внутри display() функции basicLib::print(int) и basicLib::print(double), поскольку они видимы в точке вызова. Так как фактический аргумент функции имеет тип matrixLib::matrix, то функция print(), объявленная в пространстве имен matrixLib, также будет кандидатом. Каковы функции-кандидаты для print(87)? Только basicLib::print(int) и basicLib::print(double), видимые в точке вызова. Поскольку аргумент имеет тип int, дополнительное пространство имен в поисках других кандидатов не рассматривается.




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



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