Раздел: Документация / Стандарт языка С++ /

1.8. Объектная модель C++

Все способы изучить Python Все способы изучить С++

Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее...

1. Конструкции в программе на C++ создают, уничтожают, ссылаются на объекты, получают доступ к ним и управляют ими. Объект - это область хранения. [ Примечание: Функция не является объектом, независимо от того, занимает ли она память так, как это делают объекты. — конец примечания ] Объект создается определением (3.1), новым выражением (5.3.4) или реализацией (12.2), когда это необходимо. Свойства объекта определяются при его создании. Объект может иметь имя (Раздел 3). Объект имеет срок хранения (3.7), который влияет на его время жизни (3.8). Объект имеет тип (3.9). Термин объектный тип относится к типу, с помощью которого создается объект. Некоторые объекты являются полиморфными (10.3); реализация генерирует информацию, связанную с каждым таким объектом, что позволяет определить тип этого объекта во время выполнения программы. Для других объектов интерпретация найденных в них значений определяется типом выражений (Раздел 5), используемых для доступа к ним.

2. Объекты могут содержать другие объекты, называемые подобъектами. Подобъект может быть подобъектом-членом (9.2), подобъектом базового класса (пункт 10) или элементом массива. Объект, который не является подобъектом какого-либо другого объекта, называется полным объектом.

3. Для каждого объекта x существует некоторый объект, называемый полным объектом x, определяемый следующим образом:

3.1. — Если x является полным объектом, то x является полным объектом x.

3.2 — В противном случае полный объект x является полным объектом (уникального) объекта, содержащего x.

4. Если полный объект, элемент данных (9.2) или элемент массива относится к типу класса, его тип считается наибольшим производным классом, чтобы отличать его от типа класса любого подобъекта базового класса; объект наибольшего производного типа класса или неклассового типа называется наибольшим производным объектом.

5. Если это не битовое поле (9.6), наибольший производный объект должен иметь ненулевой размер и занимать один или несколько байтов памяти. Подобъекты базового класса могут иметь нулевой размер. Объект тривиально копируемого или стандартного типа компоновки (3.9) должен занимать непрерывные байты в памяти.

6. Если объект не является битовым полем или подобъектом базового класса нулевого размера, адрес этого объекта является адресом первого байта, который он занимает. Два объекта, которые не являются битовыми полями, могут иметь один и тот же адрес, если один из них является подобъектом другого, или если по крайней мере один из них является подобъектом базового класса нулевого размера и они разных типов; в противном случае они должны иметь разные адреса (в соответствии с правилом “как если бы” реализации разрешается хранить два объекта по одному и тому же адресу памяти или вообще не хранить объект, если программа не может заметить разницу (1.9)).

[ Пример:

static const char test1 = 'x';
static const char test2 = 'x';
const bool b = &test1 != &test2; // всегда true

конец примера ]

7. [ Примечание: C++ предоставляет множество основных типов и несколько способов создания новых типов из существующих типов (3.9). — конец примечания ]


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика