- •14 План:
- •Функції
- •Параметри й аргументи функцій
- •Аргументи за замовчуванням
- •Локальні й глобальні змінні
- •Операція ::
- •Класи пам'яті
- •Автоматичні змінні
- •Регістрові змінні
- •Зовнішні змінні й функції
- •Статичні змінні
- •Змінні класу volatile
- •Новий стиль заголовків
- •Простори імен
- •Вбудовані ( inline ) функції
- •Рекурсивні функції
- •Математичні функції
- •Функції округлення
- •Призначення перевантаження
Аргументи за замовчуванням
C++ допускає при виклику функцій опускати деякі її параметри. Досягається це вказівкою в прототипі функції значень аргументів за замовчуванням. Наприклад, функція, прототип якої наведений нижче, може при виклику мати різний вигляд залежно від ситуації.
void Showint ( int I, bool Flag = true, char symbol = '\n' ) ;
Showint ( 1, false, 'a' ) ;
Showint ( 2, false ) ;
Showint ( 3 ) ;
У першому випадку всі три аргументи задані явно, тому робота функції здійснюється у звичайному режимі. У другому виклику у функцію передається два параметри із трьох, причому замість останнього аргументу підставляється значення за замовчуванням, а саме символ '\n'. Третій варіант звертання до функції передає тільки один цілочисельний параметр, а в якості інших аргументів використовуються значення за замовчуванням: логічна змінна зі значенням true і символьна змінна зі значенням '\n'.
Для використовуваних параметрів за замовчуванням існує обов'язкове правило: усі параметри праворуч від аргументу за замовчуванням повинні також мати значення за замовчуванням. Так, в наведеному вище прототипі неможна було б, вказавши значення параметру за замовченням для цілочисельної змінної пропустити визначення будь якого з інших аргументів за замовченням.
Розглянемо приклад, у якім здійснюється вивід знакового числа подвійної точності із вказівкою кількості значущих символів і виводу знака числа. Інакше кажучи, визначимо функцію, що приймає в якості одного з параметрів число виведених знаків. Крім того, передбачимо можливість виводу числа без знака. Для цієї мети служить параметр flag. Для рішення поставленого завдання можна скористатися функцією зведення числа в ступінь pow і функцією узяття модуля від довгого числа із плаваючою крапкою fabsl, прототипи яких знаходяться в заголовному файлі math.h:
#include <iostream.h> // містить функції введення/виводу
#include <math.h> // містить математичні функції
void Out ( // прототип функції виводу на екран числа із заданою кількістю
// десяткових знаків і знака числа
double n, // число, виведене на екран
double s = 1, // кількість десяткових знаків, виведене на екран ( за замовчуванням – 1)
bool flag = true) ; // прапор виводу на екран знака числа ( за замовчуванням – true)
void main ()
{
double pi = - 3.141592654 ; // оголошення й ініціалізація змінної pi типу double
Out ( pi, 4, false ) ; // виводить на екран 3,1415
Out ( pi, 2 ) ; // виводить на екран -3,14
Out ( pi ) ; // виводить на екран -3,1
}
void Out ( double n, double s, bool flag)
{
if ( ! flag ) n = fabsl ( n ) ; // якщо параметр flag рівний false, те n = | n |
n = ( int ) ( n * pow (10, s)) ; // домножимо число на 10s і перетворимо до цілого типу,
// відкидаючи зайві десяткові знаки
n /= pow (10,s) ; // ділимо число на 10s
cout << num << ' \n' ; // друкуємо число й переводимо каретку в початок наступного рядка
}
У тілі програми проводиться виклик однієї й тієї ж функції Out з різним числом параметрів для виводу значення змінної подвійної точності pi.
Величина, що вказується в аргументах за замовчуванням, може бути не тільки константним вираженням - вона може бути глобальною змінною або значенням, що вертаються деякої функцією.