Міністерство освіти і науки України
Національний університет „ Львівська політехніка “
Кафедра ЕОМ
Звіт
З Лабораторної роботи №1:“ Перезавантаження функцій ”
МЕТА РОБОТИ: ПОЗНАЙОМИТИСЯ ІЗ ПЕРЕВАНТАЖЕННЯМ ФУНКЦІЙ Перевантаження функцій
С++ дозволяє визначати декілька функцій з одним і тим же іменем, якщо дані функції мають різні набори параметрів (принаймні різні типи параметрів).
Нехай оголошені наступні функції:
і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)
ЗАВДАННЯ:
Варіант №11
Написати реалізацію перевантажених функцій :
int func(int* arr, int length);
int func(double * arr, int length);
Функція func перевіряє чи в масиві чередуються знаки.
Програма:
#include <stdio.h>
#include "func.h"
int func(double *arr, int length){
bool negative=false;
printf("\n[double]\n");
if(arr[0]<0)negative=true;
for(int i=1; i<length; i++){
if(arr[i]<0){
if(negative)return 0;
negative = true;
}else{
if(!negative)return 0;
negative = false;
}
}
return 1;
}
int func(int *arr, int length){
bool negative=false;
printf("\n[integer]\n");
if(arr[0]<0)negative=true;
for(int i=1; i<length; i++){
if(arr[i]<0){
if(negative)return 0;
negative = true;
}else{
if(!negative)return 0;
negative = false;
}
}
return 1;
}
#include <stdio.h>
#include "func.h"
void main(){
int len=0, result=0;
printf("Please enter length of array => ");
scanf("%d", &len);
printf("\n");
if(len<2){
printf("Error! Length of array at the least must be equal 2!\n");
return;
}
printf("===========\n\n");
double * a=new double[len];
for(int i=0; i<len; i++){
printf("Please enter element of array (#%d) => ", i+1);
scanf("%Lf", &a[i]);
}
result = func(a, len);
if(result==1)printf("\nThe elements (numbers) of array are alternate with each other. [%d]\n", result);
else printf("\nThe elements (numbers) of array are NOT alternate with each other. [%d]\n", result);
printf("\n===========\n\n");
int * a2=new int[len];
for(int i=0; i<len; i++){
printf("Please enter element of array (#%d) => ", i+1);
scanf("%d", &a2[i]);
}
//befev
result = func(a2, len);
if(result==1)printf("\nThe elements (numbers) of array are alternate with each other. [%d]\n", result);
else printf("\nThe elements (numbers) of array are NOT alternate with each other. [%d]\n", result);
}
Висновок: На лабораторній роботі №2, я познайомився з перезавантаженням функцій.