Міністерство освіти і науки України
Національний університет "Львівська політехніка"
Кафедра СКС
Звіт
З лабораторної роботи №2
з дисципліни: "Програмування ч. 2 (Об'єктно-орієнтоване програмування)"
на тему: "Перевантаження функцій"
Мета роботи:
Використовуючи перевантаження функцій, написати та продемонструвати функцію func, яка повертає середнє арифметичне елементів послідовності між мінімальним та максимальним елементами для масивів цілих і дробових значень окремо.
Короткі теоретичні відомості
С++ дозволяє визначати декілька функцій з одним і тим же іменем, якщо дані функції мають різні набори параметрів (принаймні різні типи параметрів).
Нехай оголошені наступні функції:
		іnt func(іnt);
		іnt func(int, int);
		іnt func(double);
При виклику функції з ім’ям func спершу компілятор намагатиметься знайти функцію, формальні аргументи якої відповідають фактичним аргументам без усяких перетворень типів або з використанням тільки неминучих перетворень - наприклад, імені масиву до покажчика або значення змінної до константи або навпаки. Якщо відповідна функція не знайдена, то здійснюється пошук такої функції, щоб для відповідності формальних і фактичних аргументів досить було використати тільки такі стандартні перетворення, що не спричиняють перетворень цілих типів до типів з плаваючою крапкою і навпаки. При цьому підбирається функція, для якої число таких перетворень було б мінімальним.
		int i = func(2.5, 3.7);		// Викличе func(int, int)
		int i = func(123L);			// Викличе func(int)
Третім етапом є пошук такої функції, для виклику якої досить здійснити будь-які стандартні перетворення аргументів (і знову так, щоб цих перетворень було якнайменше).
Далі здійснюється пошук функції, для якої аргументи можна одержати за допомогою всіх перетворень, розглянутих до цього, а також перетворень типів, визначених самим програмістом. Якщо й у цьому випадку єдина потрібна функція не знайдена, то на останньому етапі компілятор пробує знайти відповідність з урахуванням списку невизначених аргументів. Якщо компілятор не знайде ні однієї підходящої функції, тоді буде виведене повідомлення про помилку.
Повний лістінг виконаної програми
Перевірено на дієздатність у Microsoft Visual C++ 2008 Express Edition
// Кафедра СКС
// ООП, Лабораторна робота № 2
// Виконав студент групи КІ-15
// Дунай Андрій
// 12 варіант
#include <iostream>	// необхідна для керування потоками cin/cout
#include <conio.h>	// необхідна для використання функції _getch()
using namespace std;
float average(int integers[10])
{
	int a, i, min, minId, max, maxId;
	minId=0;
	maxId=0;
	for(i=1,min=integers[0],max=integers[0];i<10;i++)
	{
		if(integers[i]<min) { min=integers[i]; minId=i; }
		if(integers[i]>max) { max=integers[i]; maxId=i; }
	}
	if(max<min) swap(minId, maxId);
	a=0;
	for(i=minId+1;i<maxId;i++) a=a+integers[i];
	return	(float)a/(maxId-minId-1);
}
float average(float floats[10])
{
	int i, minId, maxId;
	float a, min, max;
	minId=0;
	maxId=0;
	for(i=1,min=floats[0],max=floats[0];i<10;i++)
	{
		if(floats[i]<min) { min=floats[i]; minId=i; }
		if(floats[i]>max) { max=floats[i]; maxId=i; }
	}
	//if(max<min) swap(minId, maxId);
	a=0;
	for(i=minId+1;i<maxId;i++) a=a+floats[i];	/* cout	<<	floats[i]	<<	" ";*/
	return	a/(maxId-minId-1);
	return 0;
}
int main(int argc, char* argv[])
{
	int i;
	int integers[10];
	float floats[10];
	float nAverage, fAverage;
	cout	<<	"This program calculates the average arithmetic\n";
	cout	<<	"of numbers between minimal and maximal of\n";
	cout	<<	"entered array values.\n\n";
	for(i=0;i<10;i++)
	{
		cout	<<	"Please enter INT "	<<	i+1	<<	" of 10:";
		cin	>>	integers[i];
	}
	for(i=0;i<10;i++)
	{
		cout	<<	"Please enter FLOAT "	<<	i+1	<<	" of 10:";
		cin	>>	floats[i];
	}
	nAverage=average(integers);
	fAverage=average(floats);
	cout	<<	"The average of integers is "	<<	nAverage	<<	"\n";
	cout	<<	"The average of floats is "	<<	fAverage	<<	"\n";
	_getch();
	return	0;
}
Висновок
Я навчився реалізувати перевантаження функцій у програмах на С++ та дослідив багато помилок протягом створення вище проілюстрованого коду.
		Підпис викладача