ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 6) онлайн

Классы, объекты и память

Возможно, что в процессе изучения классов и объектов у вас сформировалось представление об объекте как о копии класса с точки зрения внутренней структу- ры. Это представление адекватно лишь в первом приближении. Оно акцентирова- но на том, что объекты являются самодостаточными программными единицами, созданными по образцу, представленному определением класса. Возможно, здесь уместна аналогия с машинами, сходящими с конвейера, каждая из которых по- строена согласно стандарту своей модели. Машины в этом смысле схожи с объ- ектами, а модели — с классами.

На самом деле все устроено несколько сложнее. Верно, что каждый объект имеет собственные независимые поля данных. С другой стороны, все объек- ты одного класса используют одни и те же методы. Методы класса создаются и помещаются в память компьютера всего одии раз — при создании класса.

Это вполне логически оправданно: нет никакого смысла держать в памяти копии методов для каждого объекта данного класса, поскольку у всех объектов методы одинаковы. А поскольку наборы значений полей у каждого объекта свои, поля объектов не должны быть общими. Это значит, что при создании объектов каж- дый из наборов данных занимает определенную совокупность свободных мест в памяти. Иллюстрация вышесказанного приведена на рис. 6.8.

Object1               Object2               Object3

В примере SMALLOBJ, приведенном в начале этой главы, были созданы два объекта типа smallobj, что означало наличие двух полей с именем somedata в памя- ти. При этом функции setdata() и showdata() располагались в памяти в единст- венном экземпляре и совместно использовались обоими объектами класса. Между объектами не возникает конкуренции за общий ресурс (по крайней мере, в систе- мах с последовательной обработкой), поскольку в любой момент времени вы- полняется не более одной функции.

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

 

21