Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.04.2015
Размер:
411.82 Кб
Скачать

2.1.3 Время Жизни

Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и "живут" до завершения программы. Объекты, определенные описанием с ключевым словом static, ведут себя так же. Например *1:

int a = 1;

void f()

{

int b = 1; // инициализируется при каждом вызове f()

static int c = 1; // инициализируется только один раз

cout << " a = " << a++

<< " b = " << b++

<< " c = " << c++ << "\n";

}

main()

{

while (a < 4) f();

}

производит вывод

a = 1 b = 1 c = 1

a = 2 b = 1 c = 2

a = 3 b = 1 c = 3

Не инициализированная явно статическая (static) переменная неявно инициализируется нулем.

С помощью операций new и delete программист может также создавать объекты, время жизни которых управляется непосредственно; см. #3.2.4.

2.2 Имена

Имя (идентификатор) состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчерка _ считается буквой. C++ не налагает ограничений на число символов в имени, но некоторые части реализации находятся вне ведения автора компилятора (в частности, загрузчик), и они, к сожалению, такие ограничения налагают. Некоторые среды выполнения также делают необходимым расширить или ограничить набор символов, допустимых в идентификаторе; расширения (например, при допущении в именах символа $) порождают непереносимые программы. В качестве имени не могут использоваться ключевые слова C++ (см. #с.2.3). Примеры имен:

hello this_is_a_most_unusially_long_name

DEFINED foO bAr u_name HorseSense

var0 var1 CLASS _class ___

Примеры последовательностей символов, которые не могут использоваться как идентификаторы:

012 a fool $sys class 3var

pay.due foo~bar .name if

Буквы в верхнем и нижнем регистрах считаются различными, поэтому Count и count - различные имена, но вводить имена, лишь незначительно отличающиеся друг от друга, нежелательно. Имена, начинающиеся с подчерка, по традиции используются для специальных средств среды выполнения, поэтому использовать такие имена в прикладных программах нежелательно.

Во время чтения программы компилятор всегда ищет наиболее длинную строку, составляющую имя, поэтому var10 - это одно имя, а не имя var, за которым следует число 10; и elseif - одно имя, а не ключевое слово else, после которого стоит ключевое слово if.

2.3 Типы

2.3.1 Основные Типы

2.3.2 Неявное Преобразование Типа

2.3.3 Производные Типы

2.3.4 Тип void

2.3.5 Указатели

2.3.6 Вектора

2.3.7 Указатели и Вектора

2.3.8 Структуры

2.3.9 Эквивалентность типов

2.3.10 Ссылки

2.3.11 Регистры

Каждое имя (идентификатор) в C++ программе имеет ассоциированный с ним тип. Этот тип определяет, какие операции можно применять к имени (то есть к объекту, на который оно ссылается), и как эти операции интерпретируются. Например:

int error number;

float real(complex* p);

Поскольку error_number описано как int, его можно присваивать, использовать в арифметических выражениях и т.д. Тогда как функция real может вызываться с адресом complex в качестве параметра. Можно взять адрес любого из них. Некоторые имена, вроде int и complex, являются именами типов. Обычно имя типа используется в описании для спецификации другого имени. Единственные отличные от этого действия над именем типа - это sizeof (для определения количества памяти, которая требуется для хранения объекта типа) и new (для размещения объекта типа в свободной памяти). Например:

main()

{

int* p = new int;

cout << "sizeof(int) = " << sizeof(int) "\n";

}

Имя типа можно также использовать для задания явного преобразования одного типа в другой, например:

float f;

char* p;

//...

long ll = long(p); // преобразует p в long

int i = int(f); // преобразует f в int

Соседние файлы в папке ТЕКСТЫ для лабработы 3