Время жизни и области видимости переменных.



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

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

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

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

Время жизни объектов программы определяется по следующим правилам:

 переменная, объявленная глобально, т. е. вне всех блоков, существует на протяжении всего времени выполнения программы;

 локальные переменные, т. е. объявленные внутри блока, а также переменные с классом памяти register или auto, имеют время жизни только на период выполнения того блока, в котором они объявлены. Если переменная объявлена внутри блока с классом памяти static или extern, то она имеет время жизни на период выполнения всей программы;

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

 переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла. Можно сделать переменную видимой и в других исходных файлах, для чего в этих файлах следует ее объявить с классом памяти extern;

 переменная, объявленная или определенная локально, видима от точки объявления или определения до конца текущего блока;

 переменные из объемлющих блоков, включая переменные, объявленные на глобальном уровне, видимы во внутренних блоках. Эту видимость называют вложенной. Если переменная, объявленная внутри блока, имеет то же имя, что и переменная, объявленная в объемлющем блоке, то это разные переменные, и переменная из объемлющего блока во внутреннем блоке будет невидимой;

 функции с классом памяти static видимы только в том файле, в котором они определены. Остальные функции видимы во всей программе;

 метки в функции видимы в пределах данной функции;

 имена формальных параметров, объявленные в списке параметров прототипа функции, видимы только от точки объявления параметра до конца объявления функции.

 

 

17. Динамическое размещение данных в памяти. Операторы new и delete.

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

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

Node *newptr = new Node[10];

// выделяет в памяти sizeof(Node) байтов и сохраняет указатель на область памяти указателем Ptr. Число 10 – число размещенных объектов данных.

main(){ int* p = new int; cout << "sizeof(int) = " << sizeof(int) "\n";}

Для освобождения памяти используется оператор delete. Указатель newptr не удаляется, а исчезает область памяти, на которую указывает newptr.

delete[] newptr;

18. Встроенные типы данных языка C++.

Тип данных назначается объекту данных при его объявлении и определяет: значения, которые может принимать объект данного типа; операции, которые используются для манипуляции над объектами заданного типа.Современные языки программирования, как правило, могут иметь набор простых типов, являющихся встроенными в данный язык программирования, и средства для создания производных типов.Объектно-ориентированные языки программирования позволяют определять типы класса.Реализация простых типов данных заключается в способе представления значений данного типа в компьютере и в наборе операций, поддерживаемых для данного типа.

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

В таблице 6.1 перечислены простейшие типы данных, которые определяет язык Си++, и приведены наиболее типичные диапазоны их значений.

Таблица 6.1. Встроенные типы языка Си++.
Название Обозначение Диапазон значений
Байт char от -128 до +127
без знака unsigned char от 0 до 255
Короткое целое число short от -32768 до +32767
Короткое целое число без знака unsigned short от 0 до 65535
Целое число int от – 2147483648 до + 2147483647
Целое число без знака unsigned int (или простоunsigned) от 0 до 4294967295
Длинное целое число long от – 2147483648 до + 2147483647
Длинное целое число без знака unsigned long от 0 до 4294967295
Вещественное число одинарной точности float от ±3.4e-38 до ±3.4e+38 (7 значащих цифр)
Вещественное число двойной точности double от ±1.7e-308 до ±1.7e+308 (15 значащих цифр)
Вещественное число увеличенной точности long double от ±1.2e-4932 до ±1.2e+4932
Логическое значение bool значения true(истина) или false (ложь)

 


Дата добавления: 2015-12-21; просмотров: 18; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!