![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Функции с переменным количеством параметров
В C++ допустимы функции, у которых количество параметров при компиляции определения функции не определено. Кроме того, могут быть неизвестными и типы параметров. Количество и типы параметров становятся известными только в момент вызова функции, когда явно задан список фактических параметров. При определении и описании таких функций спецификация формальных параметров заканчивается многоточием:
тип имя (список_явных_параметров,...);
Каждая функция с переменным списком параметров должна иметь один из двух механизмов определения их количества и типов. Первый подход предполагает добавление в конец списка реально использованных, необязательных, фактических параметров специального параметра-индикатора с уникальным значением которое будет сигнализировать об окончании списка. В теле функции параметры перебираются, и их значение сравнивается с заранее известным концевым признаком. Второй подход предусматривает передачу в функцию значения реального количества используемых фактических параметров, которые передаются с помощью одного из обязательных параметров. В обоих случаях переход от одного фактического параметра к другому выполняется с помощью указателей (с использованием адресной арифметики).
#include " stdafx.h" #include < iostream>
using namespace std;
long summa(int k,...) { int *pik = & k;
long total = 0;
for (; k; k--) total += *(++pik);
return total; }
int main(int argc, char* argv[]) { setlocale(LC_ALL, " Russian");
cout < < " \n summa(2, 6, 4) = " < < summa(2, 6, 4); cout < < " \n summa(6, 1, 2, 3, 4, 5, 6) =" < < summa(6, 1, 2, 3, 4, 5, 6);
return 0; }
Результат
summa(2, 6, 4)=10 summa(6, 1, 2, 3, 4, 5, 6)=21 Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Особенность этой программы, что указатель pik может работать только с целочисленными фактическими параметрами.
#include " stdafx.h" #include < iostream>
using namespace std;
double prod(double arg,...) { double result = 1.0;
double *prt = & arg;
if (*prt == 0.0) return 0.0;
for(; *prt; prt++) result *= *prt;
return result; }
int main(int argc, char* argv[]) { setlocale(LC_ALL, " Russian");
cout < < " \n prod(2e0, 4e0, 3e0, 0e0) = " < < prod(2e0, 4e0, 3e0, 0e0); cout < < " \n prod(1.5, 2.0, 3.0, 0.0) = " < < prod(1.5, 2.0, 3.0, 0.0); cout < < " \n prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0) = " < < prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0); cout < < " \n prod(0e0) =" < < prod(0e0);
return 0; }
Результат
prod(2e0, 4e0, 3e0, 0e0) = 24 prod(1.5, 2.0, 3.0, 0.0) = 9 prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0) = 4.2 prod(0e0) = 0
Признаком окончания списка фактических параметров служит параметр с нулевым значением. Чтобы функция с переменным количеством параметров воспринимала параметры различных типов, то для однотипных параметров необходимо передавать информацию функции с помощью обязательного дополнительного параметра.
Контрольные вопросы 1. Что такое перегрузка функции? 2. Для чего применяется перегрузка функций? 3. Как определяется, какая из версий перегружаемых функций будет вызвана? 4. Каким образом описывается шаблон семейства функций? 5. Что такое рекурсия? 6. Какие виды рекурсии вы знаете? 7. Как описываются функции с переменным количеством параметром?
|