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

    Листинг 12.13.  OVERLOAD.CPP (перегрузка функций)

    1:      #include <iostream.h>
    2:
    3:      int square(int a);
    4:      double square(double a);
    5:      long double square(long double a);
    6:
    7:      main()
    8:      {
    9:      int x = 10;
    10:     double у = 20.5;
    11:     long double z = 30.75;
    12:
    13:     cout « square(x) « '\n';
    14:     cout « square(y) « '\n';
    15:     cout « square(z) « '\n';
    16:     return 0;
    17:     }
    18:
    19:     int squarefint a)
    20:     {
    21:     return a * a;
    22:     }
    23:
    24:     double square(double a)
    25:     {
    26:     return a * a;
    27:     }
    28:
    29:     long double square(long double a)
    30:     {
    31:     return a * a;
    32:     }

    Прототипы трех перегруженных функции square() определены в строках 3-5. Все
функции имеют одинаковое имя, но, тем не менее, они различны, поскольку кажда
из них отличается хотя бы одним параметром от другой. Сами функции реализованы
в строках 19-32 как раздельные, т.е. имеющие различные имена.
    В строках 13-15 показано, как перегруженные функции могут прояснять суть
программы. Несмотря на различия в типах данных, очевидно, что каждый оператор
выводит квадрат аргумента. Это куда более приятно, чем различать функции по
именам типа squarelnt(), squareDouble() и squareLongDouble(). Конечно, решать,
стоит ли перегружать функции, которые выполняют более или менее схожую работу,
придется вам. Если вы назовете все функции в вашей программе одним и тем же
именем (с учетом того, что они должны отличаться хотя бы одним своим
аргументом), то ваш код может стать совершенно непостижимым, как новелла,
представляющая собой многократное повторение одного и того же слова.

    Аргументы функций по умолчанию

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

    int sum(int a,  int b,  int c,  int d)
{
    return a + b + с + d;
}

    Для вызова функции только с двумя аргументами (назовем их vl и v2) следует
дополнить нулями два недостающих параметра:

    cout « sum(v1,  v2,  0,  0);

    Это ограничение невелико, но оно заставляет вас разбираться в документации
по функции sum() для того, чтобы определить, какими значениями дополнить
неиспользуемые параметры. Ошибочное употребление -1 или другого значени
вместо параметров с и d, что вполне может допустить невнимательный
программист, заставит функцию вернуть неправильную сумму.


    Глава 12. Введение в C++     295 
