Перегружаемые функции
Поскольку при вызове функций типы данных подставляемых аргументов и их количество должны соответствовать типам данных и количеству параметров функций, в языке C приходилось использовать множество функций с различными именами для выполнения одних и тех же действий над различными типами данных. Например, для вычисления абсолютного значения некоторого числа в библиотеках языка C имелось несколько различных функций: abs, labs, fabs, fadsf. Использование этих функций определялось типами данных обрабатываемых чисел. Но все они выполняли одно и то же действие – вычисляли абсолютное значение аргумента. Это доставляло определенные неудобства.
В языке C++ появилось понятие перегруженных (перегружаемых) функций, которое позволило избавиться от этого неудобства.
Перегруженными функциями называются функции, имеющие одинаковые имена, но различающиеся количеством, типами данных или порядком следования разнотипных параметров. Например:
Void f (char c)
{
…….
}
Void f (int c)
{
…….
}
Int f (char c, int i)
{
…….
}
Void f (int c, char i)
{
…….
}
Void f (char c, char i)
{
…….
}
При вызове таких функций компилятор сам определяет, какую из этих функций необходимо использовать применительно к использованному при вызове списку аргументов. Чтобы у компилятора не возникало “сомнений” по поводу выбора подходящего варианта перегруженной функции, списки параметров перегруженных функций должны однозначно различаться.
Нельзя перегружать функции, различающиеся только типами данных возвращаемых значений. Например, компилятор “не разрешит” перегрузить следующую функцию:
Int f (char c, char i)
{
…….
}
Это объясняется тем, что функции можно вызывать без использования возвращаемого функцией значения. При таком вызове функций с совпадающим списком параметров компилятор не сможет определить, какую из функций использовать.
Параметры по умолчанию
Еще одна интересная возможность при работе с функциями состоит в использовании параметров по умолчанию.
Рассмотрим пример:
void F (int I, double D, char C = ’a’, int J = 10)
{
cout << C << “ “ << J << endl;
}
Int main ()
{
F (0, 3.14); //Результат: а 10
F (0, 3.14, ’G’); //Результат: G 10
F (0, 3.14, ’G’, 1000); //Результат: G 1000
}
В этом примере в функции F последние два параметра определены как параметры по умолчанию.
При вызове функций имеющих параметры по умолчанию вместо них аргументы можно не подставлять. В этом случае внутри функции в качестве значений параметров будут использованы те значения, которые были заданы в заголовке функции. В том случае, если при вызове функции на место параметра по умолчанию будет подставлен некоторый аргумент, то внутри функции в качестве значения параметра по умолчанию будет использовано значение аргумента.
Количество параметров по умолчанию может быть любым. При использовании параметров по умолчанию необходимо помнить:
1. все параметры по умолчанию должны находиться в конце списка параметров функции;
2. если при вызове функции не указывается аргумент для некоторого параметра по умолчанию, то и все следующие аргументы должны быть пропущены.
Дата добавления: 2019-02-07; просмотров: 260;