►Перегрузка функций-членов...165

Функции-члены могут перегружаться так же, как и обычные функции ( обратитесь к главе 6, "Создание функций", если забыли, что это значит ). Как вы помните, имя класса является частью полного имени, и все приведённые ниже функции вполне корректны.

    class Student

    {

    public :

        /* grade — возвращает текущую среднюю оценку */

        float grade( ) ;

        /* grade — устанавливает новое значение оценки и возвращает предыдущее */

        float grade( float newGPA )

        /* ...прочие члены-данные... */

    } ;

    class Slope

    {

    public :

        /* grade — возвращает снижение оценки */

        float grade( ) ;

        /* ...прочие члены-данные... */

    } ;

    /* grade — возвращает символьный эквивалент оценки */

    char grade( float value ) ;

    int main( int argcs , char* pArgs[ ] )

    {

        Student s ;

        s.grade( 3.5 ) ; /* Student::grade( float ) */

        float v = s.grade( ) ; /* Student::grade( ) */

        char с = grade( v ) ; /* ::grade( float ) */

        Slope o ;

        float m = о.grade( ) ; /* Slope::grade( ) */

        return 0 ;

    }

_________________

165 стр. Глава 13. Работа с классами

Полные имена вызываемых из main( ) функций указаны в комментариях.

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

В приведённом примере первые два вызова обращаются к функциям-членам Student::grade( float ) и Student::grade( ) соответственно. Эти функции отличаются списками аргументов. Вызов функции s.grade( ) обращается к Student::grade( ), поскольку тип объекта s — Student.

Третья вызываемая функция в данном примере — функция ::grade( float ), не имеющая вызывающего объекта. Последний вызов осуществляется объектом типа Slope, и соответственно вызывается функция-член Slope::grade( float ).

_________________

166 стр. Часть 3. Введение в классы