АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Пример перегрузки функций

Читайте также:
  1. X. примерный перечень вопросов к итоговой аттестации
  2. Автоматизация функций в социальной работе
  3. АНАЛИЗ ФУНКЦИЙ СПЕЦИАЛИСТОВ ПО СТРАТЕГИЧЕСКОМУ МЕНЕДЖМЕНТУ И ПОЛНОМОЧИЙ ОРГАНОВ УПРАВЛЕНИЯ ОРГАНИЗАЦИИ, ПРИНИМАЮЩИХ СТРАТЕГИЧЕСКИЕ РЕШЕНИЯ.
  4. Анализ функций управления
  5. Б) Вычисление тригонометрических функций.
  6. В некоторых странах, например в США, президента заменяет вице-
  7. Вания. Одной из таких областей является, например, регулирова-
  8. Ввод функций вручную
  9. Взаимная ортогональность собственных функций эрмитовых операторов
  10. Взаимосвязь правопорядка и функций государства
  11. Виды знания. Контрпример стандартному пониманию знания
  12. Власть примера. Влияние с помощью харизмы

Приведем пример функции S 1 с двумя параметрами х, у, работающая в зависимости от типа передаваемых аргументов, следующим образом:

– если тип параметров целочисленный, функция S 1 складывает их значения и возвращает полученную сумму;

– если тип параметров long, функция S 1 перемножает их значения и возвращает полученное произведение;

– если тип параметров вещественный, функция S 1 делит их значения и возвращает частное от деления.

# include <stdio.h>

int S1 (int x, int y) {

return x+y;

}

long S1 (long x, long y) {

return x*y;

}

double S1 (double x, double y) {

return x/y;

}

int main ()

{

int a = 1, b = 2, c;

long i = 3, j = 4, k;

double x = 10, y = 2, z;

c=S1(a, b);

k=S1(i, j);

z=S1(x, y),

printf("\n c = %d; k = %ld; z = %lf. \n", c, k, z);

return 0;

}

В результате получим:

c = 3; k = 12; z = 5.000000.

 

Функции с переменным числом параметров

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

void f1 (int a, double b, …);

Такая запись указывает компилятору на то, что за обязательными фактическими аргументами для параметров a и b могут следовать, а могут и не следовать другие аргументы при вызове этой функции.

Перечислим основные особенности использования данного механизма.

1. Используется несколько макрокоманд для доступа к параметрам таких функций, это:

va_list и va_start – макрокоманды подготовки доступа к параметрам;

va_arg – использование параметров;

va_end – отчистка перед выходом.

Они объявлены в заголовочном файле stdarg.h.

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

3. Для макроса va_start необходимо передать два аргумента – имя списка параметров, который задает va_list и их количество.

4. Нарушать указанный порядок макрокоманд нельзя. Иначе можно получить непредсказуемые последствия.

5. Для макроса va_arg нужно помимо имени списка параметров передать и предполагаемый тип. При несоответствии типов – ошибка.

Использование многоточий полностью выключает проверку типов параметров. Многоточие необходимо, только если изменяются и число параметров, и их тип.

Следующий пример иллюстрирует эту возможность.

#include <stdarg.h>

#include <stdio.h>

void f1(double s, int n...) {

int v;

va_list p;

va_start(p, n);

printf(" \n Double S = %lf ", s);

for(int i=1; i<=n; i++) {

v = va_arg(p, int);

printf("\n Argument %d = %d ", i, v);

}

va_end(p);

}

void main(void) {

f1(1.5, 3, 4, 5, 6);

}

В результате получим:

Double S = 1.500000

Argument 1 = 4

Argument 2 = 5

Argument 3 = 6

Press any key to continue

 

Шаблоны функций


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)