
- •Лабораторна робота № 4. Функції. Перевантаження функцій
- •Int sum (int X, int y); // оголошення функції sum()
- •Int sum (int X, int y) // реалізації функції sum()
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Завдання 4
- •Завдання 5
- •Завдання 6
- •Завдання 7
- •Завдання 8
- •Завдання 9
- •Завдання 10
- •Завдання 11
- •Завдання 12
Лабораторна робота № 4. Функції. Перевантаження функцій
Мета роботи: навчитись розробляти функції, передавати параметри в функцію; ознайомитись процедурою перевантаження функцій.
Теоретичні відомості:
Опис функції складається з її оголошення та визначення (реалізації).
Приклад опису функції:
1-ий спосіб:
int sum (int x, int y); // оголошення функції sum()
int main ()
{
// тіло функції main
return 0;
}
int sum (int x, int y) // реалізації функції sum()
{
// тіло функції
return <результат>;
}
2-ий спосіб:
int sum (int x, int y) // оголошення та реалізації функції sum()
{
// тіло функції
return <результат>;
}
int main ()
{
// тіло функції main
return 0;
}
Зауваження. Якщо кількість функцій збільшується і з однієї функції викликається інша, тоді потрібно контролювати порядок оголошення функцій. В такому випадку краще використовувати 1-ий спосіб опису функцій – всі оголошення функцій розміщувати одним блоком перед функцією main(), а їх визначення – після функції main().
Локальні та глобальні змінні
Локальна змінна, що створюється всередині функції, видаляється після виходу з функції. Якщо назва глобальної змінної та локальної співпадають, то всередині функції всі дії будуть виконуватись над локальною змінною. Для того, щоб доступитись до глобальної змінної необхідно використати оператор ::.
Приклад:
int x;
int sum (int x, int y) // оголошення та реалізації функції sum()
{
int z = x + y; //звертання до локальної змінної х
z = ::x + y; //звертання до глобальної змінної х
return z;
}
Передавання параметрів в функцію.
1) передавання вказівника (*) на змінну
void func (int x) // значення результату не повертається та
{ // ніде не зберігається
x +=5;
}
Якщо задати функцію наступним чином:
void func (int *x); // оголошення функції func()
int main ()
{
int x = 7;
func(&x); // змінна х набуде значення 12
cout << x;
cin.get();
return 0;
}
void func (int *x) // у функцію передаємо не значення змінної, а її адресу
{
*x += 5; // *х = *х + 5;
}
АБО
Якщо функція велика, то використання * при кожному використанні вказівника не зручно, тоді використовують механізм посилань. Всередині функції змінна є псевдонімом вихідної змінної. Будь-яка дія над псевдонімом – виконується над вихідною змінною. В оголошенні та реалізації функції вказується оператор &.
void func (int &x); // оголошення функції func()
int main ()
{
int x = 7;
func(x); // змінна х набуде значення 12
cout << x;
cin.get();
return 0;
}
void func (int &x) // у функцію передаємо не значення змінної, а її адресу
{
x += 5; // х = х + 5;
}
2) передавання масивів
void func1 (char *ch); // оголошення функції func1()
void func2 (char ch[]); // оголошення функції func2()
int main ()
{
char str[] = "string";
func1(str); // змінна х набуде значення 12
func2(str);
cout << str; // strIng
cin.get();
return 0;
}
void func1 (char *ch) // у функцію передаємо адресу першого елемента масиву
{
ch[3] = 'h'; // змінюється значення елемента масиву
}
void func2 (char ch[])
{
ch[3] = 'I'; // змінюється значення елемента масиву
}
Зауваження. Оголошення функцій з параметром (char *ch) є ідентичним до оголошення функції з параметром (char ch[]).
3) передавання багатовимірного масиву
void func3 (int a[][4]); // оголошення функції func3()
int main ()
{
int arr[3][4];
for (int i = 0; i < 3; i++ )
for (int j = 0; j < 4; j++ )
cin>>arr[i][j];
func3(arr);
cout << arr[1][3]; // 99
cin.get();
return 0;
}
void func3 (int a[][4])
{
a[1][3] = '99'; // змінюється значення елемента масиву
}
4) передавання багатовимірного масиву без прив’язки до розмірності
Використовується конструкція
int *a[] або int **a
void func4 (int *a[], short r, short c); // оголошення функції func4()
int main ()
{
int arr[2][3] = {{1, 2, 3}, {2, 5, 6}};
int *part_arr[] = {arr[0], arr[1]} // створюємо масив вказівників
func4(part _arr, 2, 3); // передаємо адресу масиву вказівників
cin.get();
return 0;
}
void func4 (int *a[], short r, short c
{
for (int i = 0; i < r; i++ )
for (int j = 0; j < c; j++ )
cout << arr[i][j]<<"\ n";
}
5) передавання багатовимірного масиву як одновимірного
void func4 (int *a, short r, short c); // оголошення функції func4()
int main ()
{
int arr[2][3] = {{1, 2, 3}, {2, 5, 6}};
func4(arr[0], 2, 3); // передаємо адресу першого елемента масиву
cin.get();
return 0;
}
void func4 (int *a, short r, short c
{
for (int i = 0; i < r; i++ )
{
for (int j = 0; j < c; j++ )
cout << a[i*c + j] << "\t";
}
cout << "\ n";
}
Перевантаження функцій
Перевантаження функцій – це можливість використання одної назви для кількох функцій, що відрізняються типом параметрів та їх кількістю.