Передача у функцію константних параметрів. Повернення функцією константи

Передача у функцію константних параметрів. Повернення функцією константи


Зміст


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"


Зв’язані теми