С++ для начинающих


Объявления перегруженных функций-членов


Функции-члены класса можно перегружать:

class myClass {

public:

   void f( double );

char f( char, char );  // перегружает myClass::f( double )

   // ...

};

Как и в случае функций, объявленных в пространстве имен, функции-члены могут иметь одинаковые имена при условии, что списки их параметров различны либо по числу параметров, либо по их типам. Если же объявления двух функций-членов отличаются только типом возвращаемого значения, то второе объявление считается ошибкой компиляции:

class myClass {

public:

   void mf();

   double mf();   // ошибка: так перегружать нельзя

   // ...



};

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

class myClass {

public:

   void mf();

   void mf();   // ошибка: повторное объявление

   // ...

};

Все функции из множества перегруженных должны быть объявлены в одной и той же области видимости. Поэтому функции-члены никогда не перегружают функций, объявленных в пространстве имен. Кроме того, поскольку у каждого класса своя область видимости, функции, являющиеся членами разных классов, не перегружают друг друга.

Множество перегруженных функций-членов может содержать как статические, так и нестатические функции:

class myClass {

public:

   void mcf( double );

   static void mcf( int* );   // перегружает myClass::mcf( double )

    // ...

};

Какая из функций-членов будет вызвана– статическая или нестатическая – зависит от результатов разрешения перегрузки. Процесс разрешения в ситуации, когда устояли как статические, так и нестатические члены, мы подробно рассмотрим в следующем разделе.



Содержание раздела