Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Аргументы по умолчанию

Прототипы функций

 

Синтаксис функций в С++ инспирировал синтаксис прототипов функций, используемый компиляторами со стандартного (ANSI) С. по сути, возвращаемый тип, идентификатор функции и типы параметров составляют прототип функции. Прототип функции (function prototype) – это объявление функции, ноне её определение. Благодаря явному объявлению возвращаемого типа и списка типов аргументов, в С++ при обращении к функции возможны строгая проверка типов и неявные преобразования типов.

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

Тип имя (список_объявлений_аргументов);

Список_объявлений_аргументов может быть пустым, содержать единственное объявление или несколько объявлений, разделённых запятыми. Если функция не имеет параметров, допускается использование ключевого слова void. В С++ функция с пустым списком параметров выглядит как имя_функции(). Такая информация позволяет компилятору отслеживать совместимость типов. Аргументы преобразуются к указанным в объявлении типам так же, как в случае присваивания.

В программе “наименьшее из двух” мы использовали функцию min(). Её прототип будет:

Int min(int, int);

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

Int min(int x, int y);

В С++ используется эллипсический символ (ellipsis – пропущенная, но подразумеваемая функция) (…) для обозначения списка аргументов, который не указан, но подразумевается. Функция printf() из стандартной библиотеки stdio.h имеет следующий прототип:

Int printf(const char* cntrl_str, …);

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

Формальному параметру может быть задан аргумент по умолчанию (default argument). Обычно это константа, которая часто встречается при вызове функции. Использование аргумента по умолчанию позволяет не писать его значение при каждом вызове. Рассмотрим следующую функцию:

Int sqr_or_power (int n, int k = 2) // k = 2 по умолчанию

{

if (k==2)

return (n * n);

else

return (sqr_or_power (n, k-1)*n);

}

Здесь предполагается, что чаще всего эта функция применяется для вычисления значения n в квадрате.

Sqr_or_power (i+5) //вычислит (i+5)*(i+5)

Sqr_or_power (i+5, 3) //вычислит (i+5) в кубе

Только несколько последних параметров функции могут иметь значения по умолчанию:

Void foo(int i, int j = 7); //допустимо

Void foo(int i = 3, int j); //недопустимо

Void foo(int i, int j = 3, int k = 7); //допустимо

Void foo(int i = 1, int j = 2, int k = 3); //допустимо

Void foo(int i, int j = 2, int k); //недопустимо

 

 

3. Область видимости

 

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

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

{

int a = 2; //a вне блока

cout << a << endl; // напечатается 2

{

int a = 7; // a внутри блока

cout << a << endl; // напечатается 7

} // выход из внутреннего блока

cout << ++a << endl; // напечатается 3

}

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

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

<== предыдущая лекция | следующая лекция ==>
Вызов функции | Шлюз dbWeb для доступа к БД
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 311; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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