Передача в функцию константных параметров. Возврат функцией константы

Передача в функцию константных параметров. Возврат функцией константы


Содержание


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

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

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

Более подробно о передаче параметров в функцию по значению и по адресу описывается в теме:



2. Как объявляется передача в функцию константного параметра?

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

const type parameter

где

  • type – тип константного параметра;
  • parameter – название константного параметра.

Общая форма объявления функции, которая получает N константных параметров:

return_type FunName(const type1 parameter1, const type2 parameter2, ..., const typeN parameterN)
{
    ...
}

где

  • FunName – имя функции;
  • return_type – тип, возвращаемый функцией;
  • type1, type2, …, typeN – типы константных параметров с именами parameter1, parameter2, …, parameterN;
  • parameter1, parameter2, …, parameterN – имена константных параметров.

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

В примере объявляется функция Area(), которая получает константный параметр radius.

// функция, которая вычисляет площадь круга по заданному радиусу radius
// значение radius передается как константа
double Area(const double radius)
{
    return double (3.1415 * radius * radius);
}

Использование функции в другом программном коде

// использование функции Area()
double area;
area = Area(5.5); // area = 95.0304

// так тоже можно
double r = 7.88;
area = Area(r); // area = 195.07

Если в функции Area() попробовать изменить значение константы radius, например

radius = 2.88;

то компилятор выдаст ошибку:

'radius': you cannot assign to a variable that is const.

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

Объявляется функция Count(), подсчитывающая количество заданных символов в строке. Строка задана константным параметром

// функция, которая подсчитывает количество заданных символов в ASCIIZ строке
// строка s передается как константный параметр
int Count(const char * s, char sym)
{
    int i=0, k=0;
    while (s[i] != '\0')
    {
        if (s[i] == sym) k++;
        i++;
    }
    return k;
}

Использование функции Count()

// использование функции Count()
int n;
char * str1 = "Hello world!";
char * str2 = "bestprog.net";

n = Count(str1, 'o'); // n = 2
n = Count(str1, 'l'); // n = 3
n = Count(str2, 't'); // n = 2

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

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

// функция, которая подсчитывает количество нулевых элементов массива A
// массив A задается как константный
int CountZero(const int * A, int n)
{
    int i=0, k=0;
    for (i=0; i<n; i++)
        if (A[i]==0) k++;
    return k;
}

Если в теле функции CountZero() попробовать изменить значения элемента массива A, например

A[3] = 15;

то компилятор выдаст ошибку.

Использование функции CountZero() в другом программном коде

// использование функции CountZero()
int n = 10;
int AA[] = { 3, 5, 6, 0, 0, -2, 1, -2, 0, 7 };
n = CountZero(AA, n); // n = 3

6. Примеры объявления функций, которые возвращают константу оператором return

Допускается объявлять функцию, которая возвращает константу.

Пример 1. Функция, возвращающая константное число типа double.

// функция, возвращающая константное число
const double Pi(void)
{
    return 3.141592;
}

Использование функции Pi() в другом программном коде

// использование функции Pi()
double d;
d = Pi(); // d = 3.141592

Пример 2. Функция, возвращающая константную строку типа string.

// функция, возвращающая константную строку
const string GetSiteName(void)
{
    return "bestprog.net";
}

Использование функции GetSiteName() в другом программном коде

// использование функции GetSiteName()
string s;
s = GetSiteName(); // s = "bestprog.net"


Связанные темы