Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 2
з дисципліни: “Об’єктно-орієнтоване програмування”
на тему: “Перевантаження функцій”
Мета лабораторної роботи
Навчитись створювати програми, що містять перевантажені функції.
Теоретичні відомості
С++ дозволяє визначати декілька функцій з одним і тим же іменем, якщо дані функції мають різні набори параметрів (принаймні різні типи параметрів).
Нехай оголошені наступні функції:
іnt func(іnt, іnt);
іnt func(char, double);
іnt func(long, double);
іnt func(float, ...); // Функція з невизначеним числом аргументів.
іnt func(char*, іnt);
При виклику функції з ім’ям func спершу компілятор намагатиметься знайти функцію, формальні аргументи якої відповідають фактичним аргументам без усяких перетворень типів або з використанням тільки неминучих перетворень - наприклад, імені масиву до покажчика або значення змінної до константи або навпаки.
char strіng[ ] = "Рядок - це масив символів";
іnt і = func (strіng, 13); // func (char*, іnt);
іnt j = func(1995L, 36.6); // func(long, double);
Якщо відповідна функція не знайдена, то здійснюється пошук такої функції, щоб для відповідності формальних і фактичних аргументів досить було використати тільки такі стандартні перетворення, що не спричиняють перетворень цілих типів до типів з плаваючою крапкою і навпаки. При цьому підбирається функція, для якої число таких перетворень було б мінімальним.
float a=36.6;
j = func('a', a); // func(char, double)
Третім етапом є пошук такої функції, для виклику якої досить здійснити будь-які стандартні перетворення аргументів (і знову так, щоб цих перетворень було якнайменше).
іnt l = func("РІК:", 2002.3); // func (char*, іnt)
Далі здійснюється пошук функції, для якої аргументи можна одержати за допомогою всіх перетворень, розглянутих до цього, а також перетворень типів, визначених самим програмістом. Якщо й у цьому випадку єдина потрібна функція не знайдена, то на останньому етапі компілятор пробує знайти відповідність з урахуванням списку невизначених аргументів. Так, при виклику func (1, 2, 3) підходить лише одна функція func(float, ...). Якщо компілятор не знайде ні однієї підходящої функції, тоді буде виведене повідомлення про помилку.
Індивідуальне завдання
4. Написати реалізацію перевантажених функцій:
int func(int *arr, int length);
int func(char *str);
Функція func перевіряє чи елементи масиву розташовані по зростанню.
Код програми
#include <iostream>
#include <conio.h>
using namespace std;
int func(int *arr, int length)
{
int i, k = 1;
for (i = 0; i <= length - 2; i++)
if (arr[i] > arr[i + 1])
k = 0;
return k;
}
int func(char *str)
{
int i, k = 1;
for (i = 0; i <= strlen(str) - 2; i++)
if (str[i] > str[i + 1])
k = 0;
return k;
}
void main()
{
setlocale(LC_CTYPE, "Ukrainian");
cout << "func(int *arr, int length):" << endl;
int l;
cout << "Введiть кiлькiсть чисел: ";
cin >> l;
int *arr = new int[l];
for (int i = 0; i < l; ++i)
cin >> arr[i];
if (func(arr, l) == 1)
cout << "Числа розташованi по зростанню";
else
cout << "Числа розташованi не по зростанню";
cout << endl << endl;
cout << "func(char *str):" << endl;
char str[128];
cin >> str;
if (func(str) == 1)
cout << "Букви розташованi по алфавiту";
else
cout << "Букви розташованi не по алфавiту";
cout << endl;
_getch();
}
Результат виконання програми
/
/
Висновок
Я навчився створювати програми, що містять перевантажені функції.