Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 1.Вопросы по общепрофессиональным дисцип...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
516.49 Кб
Скачать

3)Функции. Шаблоны функций, перегрузка функций.

Функция - это независимая совокупность объявлений и операторов, обычно предназначенная для решения определенной задачи. Программы на С++ состоят по крайней мере из одной функции main, но могут содержать и больше функций.

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

При неполном объявлении используется заголовок, после которого стоит точка с запятой (прототип функции).

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

При использовании большого количества функций неполные объявления помещают в т.н. “заголовочные“ файлы, которые включаются в начало текста программой директивой препроцессора #include.

Вызов функции передает управление из вызывающей функции к вызванной. Фактические аргументы, если они есть, передаются в вызванную функцию. Если в функцию передается копия объекта, то это передача по значению. Если в функцию передается адрес объекта, то это передача по ссылке (или указателю). При выполнении оператора return в вызванной функции управление и, возможно, возвращаемое значение передаются в вызывающую функцию.

Определение функции

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

[<sc-specifier>][<type-specifier>]<declarator>

([<parameter-list>])

<function-body>

Спецификатор класса памяти <sc-specifier> задает класс памяти функции, который может быть или static или extern. Спецификатор типа <type-specifier> и декларатор <declaration> определяют тип возвращаемого значения и имя функции. Список параметров <parameter-list> - это список (возможно пустой) формальных параметров, которые используются функцией.

Тело функции <function-body> - это составной оператор, содержащий объявления локальных переменных и операторы.

Или:

тип <имя функции>(список параметров) {         тело функции }

Шаблоны функций. Шаблоны позволяют создавать (конструировать) семейства родственных функций и классов. Цель введения шаблонов функций - автоматизация создания функций, которые могут обрабатывать разнотипные данные. Параметризовать в шаблоне функций можно тип возвращаемого функцией значения и типы любых параметров, количество и порядок размещения которых должны быть фиксированы.

Для параметризации используется список формальных параметров шаблона, который заключается в скобки <>. Каждый формальный параметр шаблона обозначается служебным словом class, за которым следует имя параметра (идентификатор).

Шаблон семейства функций состоит из двух частей - заголовка шаблона template <список_параметров_шаблона> и из определения функции, в котором тип возвращаемого значения и типы любых параметров обозначаются именами параметров шаблона, введенных в его заголовке. Те же имена параметров шаблона могут использоваться и в теле определения функции для обозначения типов локальных объектов. Механизм шаблонов функций позволяет автоматизировать подготовку переопределений перегруженных функций. При использовании шаблонов уже нет необходимости готовить заранее все варианты функций с перегруженным именем. Компилятор автоматически, анализируя вызовы функций в тексте программы, формирует необходимые определения именно для таких типов параметров, которые использованы в обращениях.

Перегрузка функций. При определении функций в своих программах вы должны указать тип возвращаемого функцией значения, а также количество параметров и тип каждого из них. В прошлом (если вы программировали на языке С), когда у вас была функция с именем add_values, которая работала с двумя целыми значениями, а вы хотели бы использовать подобную функцию для сложения трех целых значений, вам следовало создать функцию с другим именем. Например, вы могли бы использовать add_two_values и add_three_values. Аналогично если вы хотели использовать подобную функцию для сложения значений типа float, то вам была бы необходима еще одна функция с еще одним именем. Чтобы избежать дублирования функции, C++ позволяет вам определять несколько функций с одним и тем же именем. В процессе компиляции C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно требуемую функцию. Предоставление компилятору выбора среди нескольких функций называется перегрузкой. В этом уроке вы научитесь использовать перегруженные функции. К концу данного урока вы освоите следующие основные концепции:

• Перегрузка функций позволяет вам использовать одно и то же имя для нескольких функций с разными типами параметров.

• Для перегрузки функций просто определите две функции с одним и тем же именем и типом возвращаемого значения, которые отличаются количеством параметров или их типом.

Перегрузка функций является особенностью языка C++, которой нет в языке С. Как вы увидите, перегрузка функций достаточно удобна и может улучшить удобочитаемость ваших программ.

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

Перегрузка

При определении функции необходимо указывать тип возвращаемого значения а также количество параметров и тип каждого из них. Допустим мы имеем функцию для сложения двух целых чисел, пусть имя её будет add1, она в программе потребовалась ещё как функция сложения трех чисел, тогда необходимо ввести новую функцию с именем add2. При использовании таких имен можно запутаться в параметрах, язык С++ позволяет создавать функции, с одним именем, но для различного числа параметров. Компилятор сам будет выбирать ту функцию которая ему подходит.

Int add (int a, int b)

{ return (a+b); }

Int add (int a, int b, int c)

{ return (a+b+c); }

Int main()

{ int a,b,c;

Float d,e ;

Count<<”a=”;

Cin>>a>>endl;

Cout<<”b=”;

Cin>>b>>endl;

Cout<<”c=”;

Cin>>c>>endl;

Cout<<”add(a,b)=”<<”add(a,b)”<<”\t”<<”add(a,b,c)=”<<add(a,b,c)<<endl;

D=add(d,e); }