Студопедия


Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

ФУНКЦИИ (дополнительные возможности)




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

В языке С++ допустимы функции, количество параметров у которых в заголовке функции точно не определено. Кроме этого, могут быть неизвестными и типы параметров. Количество и типы параметров становятся известными только в момент вызова функции, когда явно задан список фактических параметров.

Формат прототипа такой функции следующий:

тип имя_функции (список_явных_параметров, …);

Здесь тип — тип возвращаемого функцией значения, список_явных_параметров— список спецификаций отдельных параметров, количество и типы которых фиксированы и известны в момент компиляции. Их можно назвать обязательными. Многоточие извещает компилятор, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции проводить не нужно.

Один из двух механизмов определения количества и типов параметров предусматривает передачу в функцию значения реального количества фактических параметров. Это выполняется с помощью одного из явно задаваемых (обязательных) параметров. Рассмотрим это на следующем примере(++):

void fun(int,...);

void main()

{ int a1=10, a2=-20, a3=33, a4=-44;

fun(1,a1);

fun(2,a1,a2);

fun(4,a1,a2,a3,a4);

getch();

}

void fun(int k,...)

{ int *p=&k; cout<<"\n There are "<<k<<" arguments\n";

for (int i=1; i<=k; i++)

// или for (; k; k--)

cout<<*(++p)<<" ";

}

В функции fun первый и единственный обязательный параметр k определяет количество действительно используемых при вызове необязательных фактических параметров. Для доступа к списку параметров используется указатель p типа int *. Вначале ему присваивается адрес явно заданного параметра k, то есть он устанавливается на начало списка параметров в памяти. Затем в цикле указатель p перемещается по адресам следующих фактических параметров, соответствующих неявным формальным параметрам. С помощью операции разыменования *p выполняется выборка их значений, которые в данном примере используются для вывода.

Цикл для вывода нескольких значений можно организовать двумя способами. Первый, тривиальный, использует счётчик i. Во втором, более оригинальном способе, параметром цикла является аргумент k, значение которого уменьшается на единицу после каждой итерации. Когда его значение станет нулевым, осуществляется выход из цикла.

Особенность и недостаток такой функции —возможность работы только с фактическими параметрами одного типа (в примере целочисленными), так как указатель p объявляется с одним конкретным типом (у нас int *).





Дата добавления: 2015-02-24; просмотров: 324; Опубликованный материал нарушает авторские права? | Защита персональных данных | ЗАКАЗАТЬ РАБОТУ


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Как то на паре, один преподаватель сказал, когда лекция заканчивалась - это был конец пары: "Что-то тут концом пахнет". 8234 - | 7893 - или читать все...

Читайте также:

 

3.81.28.94 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.002 сек.