Компонентные данные
Определение данных класса внешне аналогично обычному описанию объектов базовых и производных объектов типов. Класс в этом отношении полностью сохраняет все особенности структурированных типов. Именно поэтому данные класса могут быть названы его элементами. Элементы класса могут быть как базовых, так и производных типов, то есть компонентными данными служат переменные, массивы, указатели и т.д. Как обычно, описания элементов одного типа могут быть записаны в одном операторе. Например:
class point
{
float x, y, z;
long a, b, c;
};
В отличие от обычного определения данных при описании элементов класса не допускается их инициализация. Это естественное свойство класса, так как при его определении ещё не существует участков памяти, соответствующих компонентным данным. Память выделяется не для класса, а только для объектов класса. Для инициализации компонентных объектов класса. Для инициализации компонентных данных объектов должен использоваться автоматический или явно вызываемый конструктор соответствующего класса. Существуют различия между обращениями к компонентным данным класса из принадлежащих ему функций и из других частей программы. Как уже показано на примерах, классы complex, stroka, принадлежащие классу функции, имеют полный доступ к его данным, то есть для обращения к элементу класса из тела компонентной функции достаточно использовать только имя элемента. Например, в одном конструкторе класса stroka используется оператор:
ch=new char [leh+1];
За простотой такого обращения к данным класса из его компонентной функции скрывается механизм неявного отождествления имён компонентных данных класса с элементами именно того объекта класса, для которого вызывается компонентная функция. Например, при таком определении объекта line класса stroka:
stroka line (20);
значения присваиваются именно переменным line.len и line.ch.
Для доступа к компонентным данным из операторов, выполняется вне определения класса, непосредственное использование имён элементов недопустимо. Смысл такого запрета определяется упомянутым механизмом привязки данного класса к конкретным объектам. В определение класса по существу не вводятся его данные, а только обозначается возможность их формирования при определении конкретных объектов класса. Явно размещается в памяти не класс, а конкретный объект класса. В отведённой для объектной области памяти выделяются участки, соответствующие компонентным данным (элементам объекта). Для обращения к элементу объекта нужно использовать операции выбора компонентов класса (‘.’ или ‘ –>’). Первая из них позволяет сформировать уточнённое имя по известному имени объекта:
<имя объекта> . <имя элемента>
Вторая операция обеспечивает обращение к компонентным данным объекта по заданному указателю на объект:
<указатель на объект> -> <имя объекта>
Хотя внешне компонентные данные класса могут быть подобны данным, определённым в блоке или в теле функции, но существуют некоторые различия. Данные класса не обязательно должны быть определены или описаны до их первого использования в принадлежащих классу функциях. То же самое справедливо и для принадлежащих классу функций, то есть обратиться из одной функции класса к другой можно до её определения внутри тела класса. Все компоненты класса «видны» во всех операторах его тела. Именно поэтому, кроме областей видимости «файл», «блок», «функция», в Си ++ введена особая область видимости «класс».
Дата добавления: 2015-08-08; просмотров: 729;