Локальные и глобальные переменные в С++

Каждая переменная имеет свою область видимости, то есть такую область, в которой можно работать с переменной.  За пределами этой области, о данной переменной ничего известно не будет, а значит и использовать её нельзя. Итак, переменная  находится в области видимости, если к ней можно получить доступ.

Существуют локальные и глобальные переменные. Так вот, переменные, объявленные внутри функции, называются локальными. Локальные переменные имеют свои области видимости, этими областями являются функции, в которых объявлены переменные. Таким образом, в разных функциях можно использовать переменные с одинаковыми именами, что в свою очередь очень удобно. Разделение переменных на глобальные и локальные соответствует одному из главных правил программирования, а именно – принципу наименьших привилегий. То есть, переменные, объявленные внутри одной функции, должны быть доступны только для этой функции и ни чему другому, в конце концов, они создавались именно для этой функции.   Глобальные переменные объявляются вне тела какой-либо функции, и поэтому область видимости таких переменных распространяется на всю программу. Обычно глобальные переменные объявляются перед главной функцией, но можно объявлять и после функции main(), но тогда данная переменная не будет доступна в функции main().

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

// variables.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
using namespace std;

void example();
int variable = 48; // инициализация глобальной переменной

int main(int argc, char* argv[])
{
       int variable = 12; // инициализация локально переменной
       cout << "local  variable = " << variable << endl; // печать значения содержащегося в локальной переменной
       example(); // запуск функции
       system("pause");
       return 0;
}

void example()
{
       cout << "global variable = " << variable << endl; // функция видит только глобальную переменную
}

// код Code::Blocks

// код Dev-C++

// variables.cpp: определяет точку входа для консольного приложения.

#include <iostream>
using namespace std;

void example();
int variable = 48; // инициализация глобальной переменной

int main(int argc, char* argv[])
{
       int variable = 12; // инициализация локально переменной
       cout << "local  variable = " << variable << endl; // печать значения содержащегося в локальной переменной
       example(); // запуск функции
       return 0;
}

void example()
{
       cout << "global variable = " << variable << endl; // функция видит только глобальную переменную
}


В строках 8 и 12 объявлены переменные одинакового типа с одним и тем же именем variable, но переменная в строке 8 является глобальной переменной, а переменная в строке 12 — это локальная переменная. Функция example() имеет доступ  только к глобальной переменной. В то время как функция main() имеет доступ как к локальной так и к глобальной переменным. Если в области видимости есть и локальная и глобальная переменные с одинаковыми именами, то при обращении к ним, будет использоваться ближайшая переменная, а это локальная переменная, это видно по результату работы программы (см. Рисунок 1).

CppStudio.com
local  variable = 12
global variable = 48

Рисунок 1 — Локальные и глобальные переменные в С++

Как мы уже сказали, функция main() имеет доступ и к глобальной переменной, но не показали, как получить этот доступ. В С++ существует такая операция, как разрешение области действия ::. Эта операция позволяет  обращаться к глобальной переменной из любого места программы.» Все, что нужно сделать, так это поставить двойное двоеточие перед именем переменной.  Ниже показан код, верхней программы с одним лишь изменением, и это изменение – операция разрешения доступа в строке 13.

// variables.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
using namespace std;

void example();
int variable = 48; // инициализация глобальной переменной

int main(int argc, char* argv[])
{
       int variable = 12; // инициализация локально переменной
       cout << "local  variable = " << ::variable << endl; // печать значения содержащегося в глобальной переменной
       example(); // запуск функции
       system("pause");
       return 0;
}

void example()
{
       cout << "global variable = " << variable << endl; // функция видит только глобальную переменную
}

// код Code::Blocks

// код Dev-C++

// variables.cpp: определяет точку входа для консольного приложения.

#include <iostream>
using namespace std;

void example();
int variable = 48; // инициализация глобальной переменной

int main(int argc, char* argv[])
{
       int variable = 12; // инициализация локально переменной
       cout << "local  variable = " << ::variable << endl; // печать значения содержащегося в глобальной переменной
       example(); // запуск функции
       return 0;
}

void example()
{
       cout << "global variable = " << variable << endl; // функция видит только глобальную переменную
}

Операция разрешения области действия ставится перед именем глобальной переменной, и даже, если есть локальная переменная с таким же именем, программа будет работать со значением, содержащимся в глобальной переменной. Результат работы программы (см. Рисунок 2).

CppStudio.com
local  variable = 48
global variable = 48

Рисунок 2 — Локальные и глобальные переменные в С++

Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: admin
Дата: 25.08.2012
Поделиться:

Комментарии

  1. Богдан

    я так понимаю что «::» означает содержимое подключаемых модулей этого класса(в джава это super)? я так понял?

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.