Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба 4 відомості.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
111.1 Кб
Скачать

Лабораторна робота № 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";

}

Перевантаження функцій

Перевантаження функцій – це можливість використання одної назви для кількох функцій, що відрізняються типом параметрів та їх кількістю.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]