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

Void f1(stud a)

{strcpy(a.name,"Петров"); //Копируем в a.name "Петров"

a.age+=1;

printf("%s %d\n",a.name,a.age); } // Петров 20

STUD f2(STUD b,STUD с)

{if(b.age>с.age) return b;

//возвращаем ту структуру, в которой age больше

return с;}

Void f3(stud *p)

{strcpy(p->name,"Сидоров");

p->age=21;

printf("%s %d\n", p->name, p->age);} // Сидоров 21

STUD *f4(STUD *r1,STUD *r2)

{if(r1->age>r2->age) return r1;

//возвращаем указатель на ту структуру, в которой age больше

return r2;}

Void main()

{STUD st1={"Иванов",19},st2={"Орлов",22},st3;

f1(st1);

printf("%s %d\n",st1.name,st1.age);//все равно Иванов 19

st3=f2(st1,st2);

printf("%s %d\n",st3.name,st3.age); // Орлов 22

STUD st4={"Сергеев",18},st5={"Алешин",25},*pst;

f3(&st4);

printf("%s %d\n",st4.name,st4.age); // Сидоров 21

pst=f4(&st4,&st5);

printf("%s %d\n",pst->name,pst->age);} // Алешин 25

1.10 Перегрузка функций

Цель перегрузки функций состоит в том, чтобы функция с общим именем возвращала разные значения при обращении к ней с разными по типам и количеству фактическими параметрами.

Перегруженные функции – это функции, которые имеют одинако­вое имя, но различаются по типам и по количеству передаваемых в них параметров.

Распознавание перегруженных функций при вызове выполняется только по сигнатурам (списку формальных параметров функции). Для обеспечения перегрузки необходимо для каждого имени определить, сколько разных функций связано с ним.

Пример. Функции различаются по типу передаваемых в них параметров

#include <stdio.h>

int FF(int x,int y) {return x*x+y*y;}

long FF(long x, long y) {return x*x+y*y;}

float FF(float x, float y) {return x*x+y*y;}

Void main()

{int a1=3,a2=4,a3; long b1=20,b2=400,b3;

float d1=5.5,d2=7.5,d3;

a3=FF(a1,a2);

b3=FF(b1,b2);

d3=FF(d1,d2);

printf("a3=%d b3=%ld d3=%.2f\n", a3,b3,d3);}

В результате работы программы на экран выведется:

a3=25 b3=160400 d3=86.50

Пример. Функции различаются по количеству передаваемых в них параметров.

#include <stdio.h>

double mul(double x){return x*x*x;}

double mul(double x,double y){return x*y*y;}

double mul(double x,double y,double z){return x*y*z;}

Void main()

{double M1=mul(0.2);

double M2=mul(0.2,0.4);

double M3=mul(0.2,0.3,0.4);

printf("M1=%.4lf M2=%.4lf M3=%.4lf\n", M1,M2,M3);}

В результате работы программы на экран выведется:

M1=0.0080 M2=0.0322 M3=0.0240

При определении функции с одинаковой сигнатурой, но с другим телом и типом возвращаемого значения, компилятор сообщит об ошибке, т.к. функция с такой сигнатурой уже определена. Например, если в данном примере доопределить следующую функцию, то появится сообщение об ошибке:

Int mul(double X,double y)

{if (x>y)return 1; else return 2;}

При использовании перегруженных функций желательно не пользоваться умалчиваемыми параметрами. Если определить несколько перегруженных функций с умалчиваемыми параметрами, то может выдаваться сообщение о неоднозначности:

Пример.

#include <stdio.h>

Int sum(int X) {return 2*X;}

int sum(int x, int y=5) {return x+y;}

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