Правила видимости имен для функций
Правила видимости имен определяют, какие имена “видны” в каждой конкретной точке программы. Каждая функция имеет свою область видимости.
Переменные, определенные вне функций – глобальные переменные, они “видны” во всех функциях программы, расположенных после объявления таких переменных. Переменные эти “живут” столько, сколько и сама программа.
int x; // глобальная переменная
void fn (int a)
{
x = a * a; // изменение значения глобальной переменной x
cout << x;
}
int main ()
{
...
fn (10);
cout << x; // использование значения глобальной переменной x
...
}
Переменные, объявленные внутри функции, называются локальными переменными, они “видны” только в данной функции. Локальные переменные создаются при входе в функцию и уничтожаются при выходе из нее. Поэтому локальные переменные не могут сохранять значения между вызовами функций. Единственным исключением из этого правила являются переменные, объявленные со спецификатором static. Он заставляет компилятор воспринимать данную переменную как глобальную, хотя область видимости по-прежнему ограничена функцией.
Формальные параметры функции (переменные, получающие значения, указанные при вызове этой функции) ведут себя так же, как и обычные локальные переменные, то есть создаются при входе в функцию и уничтожаются при выходе из нее.
Различные функции могут использовать одни и те же имена локальных переменных и формальных параметров.
В функциях могут использоваться имена локальных переменных и формальных параметров, совпадающие с именами глобальных переменных программы. В этом случае внутри функции "приоритет" в использовании имен отдается локальным объявлениям.
Поскольку в C++ не допускается определение функции внутри другой функции, все функции находятся на одном уровне видимости. В каждой функции известна и может быть вызвана любая объявленная ранее (посредством прототипа или определения) функция.
Одинаковое именование нескольких функций (перегрузка функций)
Функции, выполняющие сходные действия для различных наборов входных данных логично называть одним именем. В языке C++ допустимо иметь несколько функций с одним и тем же именем, потому что функции различаются не только по именам, но и по списку типов параметров. Иногда говорят, что у этих функций разные сигнатуры.
Тип возвращаемого значения не входит в сигнатуру функции. Попытка определения двух функций с одним и тем же именем и списком типов параметров, но с разными возвращаемыми значениями приведет к ошибке компиляции.
Дата добавления: 2015-11-10; просмотров: 807;