Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Объекты и Адреса (Lvalue)





Можно назначать и использовать переменные, не имеющие имен, и можно осуществлять присваивание выражениям странного вида (например, *p[a+10]=7). Следовательно, есть потребность в имени "нечто в памяти". Вот соответствующая цитата из справочного руководства по C++: "Объект есть область памяти; lvalue есть выражение, ссылающееся на объект"(#с.5). Слово "lvalue" первоначально было придумано для значения "нечто, что может стоять в левой части присваивания". Однако не всякий адрес можно использовать в левой части присваивания; бывают адреса, ссылающиеся на константу (см. #2.4).

Время Жизни

Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и "живут" до завершения программы. Объекты, определенные описанием с ключевым словом 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.

Имена

Имя (идентификатор) состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчерка _ считается буквой. 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.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

Date: 2015-09-25; view: 258; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию