Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Многомерные массивы как параметры

2020-12-06 134
Многомерные массивы как параметры 0.00 из 5.00 0 оценок
Заказать работу

Вверх
Содержание
Поиск

Если в качестве параметра функции указан массив, то передается указатель на его первый элемент. Это означает, что фактический параметр типа T[] преобразуется к типу T*, и затем передается. Поэтому присваивание элементу формального параметра-массива изменяет этот элемент. Массивы отличаются от других типов тем, что они не передаются и не могут передаваться по значению. В вызываемой функции размер передаваемого массива неизвестен. Его нужно передавать отдельно.

Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции

 

float a[ ][4].

 

Объявление параметра как float a[ ][ ] недопустимо.

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

 

Параметры функции, заданные по умолчанию

 

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

значение по умолчанию можно задать в заголовке функции, например: int myFunc(int a = 5; int b = 10;){}

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

 

int f(double a, double b = 0, double c = 1)

{

//...

}

Данную функцию можно вызывать либо с одним, либо с двумя, либо с тремя параметрами:

double x = 0.1;

double y = 0.2;

double z = 0.3;

cout << f(x) << f(x, y) << f(x, y, z);

 

Функции подстановки

Функции-подстановки, или встроенные, объявлены с модификатором inline:

inline int min(int a, int b)

{

return a < b? a: b;

}

Если функция объявлена встроенной, то компилятор подставляет в точку вызова ее тело. Спецификация inline служит подсказкой транслятору. Из-за наличия взаиморекурсивных вызовов функций-подстановок, а также функций-подстановок, рекурсивность которых зависит от входных данных, нельзя утверждать, что каждый вызов функции-подстановки действительно реализуется подстановкой ее тела.

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

 

Перегруженные функции

 

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

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

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

int max(int, int); // Выбор максимального из двух целых чисел

int max(const int *, int); // Выбор максимального элемента массива

int max(const List&);        // Выбор максимального элемента списка

 

Указатель на функцию

Возможны только две операции с функциями: вызов и взятие адреса. Указатель, полученный с помощью последней операции, можно впоследствии использовать для вызова функции. Сама функция не является переменной, в то же время указатель на нее является такой переменной, и с ним можно работать как с переменной: присваивать, передавать в качестве параметра функции, возвращать как результат из функции и т.д.

Указатель на функцию должен тоже описываться с тем же списком параметров и типом возвращаемого значения, что и сама функция. → int (*pf)(int);

 

Скобки вокруг *pf обязательны. Имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Указатель на функцию применяется для вызова функции, которую он адресует.

Часто для удобства определяют синоним типа указателя на функцию через typedef:

typedef int (*FuncType)(int);

FuncType pf;

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

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

 

Виды областей видимости

 

·     Локальная

·   Глобальная

·   Классовая

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

В С++ каждый класс образует собственную классовую область видимости, которая не совпадает ни с файловой, ни с какой-либо локальной.

Имена, определенные в файловой области видимости, видимы во всей программе. Вместе с тем, локальная переменная может повторно использовать имя глобальной переменной. В этом случае локальная переменная скрывает глобальную. Для доступа к такой глобальной переменной может использоваться операция глобальной области видимости. Это - унарная операция (::), указывающая на то, что используется имя из глобальной области видимости:

 


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.