"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора

недовольство компилятора, поскольку "abcd" является строкой, а не
int. При вызове pow(2,i) компилятор преобразует 2 к типу float, как
того требует функция. Функция pow может быть определена например
так:

- стр 30 -

float pow(float x, int n)
{
if (n < 0) error("извините, отрицателный показатель для pow()");

switch (n) {
case 0: return 1;
case 1: return x;
default: return x*pow(x,n-1);
}
}

Первая часть определения функции задает имя функции, тип
возвращаемого ею значения (если таковое имеется) и типы и имена ее
параметров (если они есть). Значение возвращается из функции с
помощью оператора return.
Разные функции обычно имеют разные имена, но функциям,
выполняющим сходные действия над объектами различных типов, иногда
лучше дать возможность иметь одинаковые имена. Если типы их
параметров различны, то компилятор всегда может различить их и
выбрать для вызова нужную функцию. Может, например, иметься одна
функция возведения в степень для целых переменных и другая для
переменных с плавающей точкой:

overload pow;
int pow(int, int);
double pow(double, double);
//...
x=pow(2,10);
y=pow(2.0,10.0);

Описание

overload pow;

сообщает компилятору, что использование имени pow более чем для
одной функции является умышленным.
Если функция не возвращает значения, то ее следует описать как
void:

void swap(int* p, int* q) // поменять местами
{
int t = *p;
*p = *q;