Статья: Элементы класса, о которых всегда необходимо помнить

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

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

BR> Очень подробно мы рассмотрим проблемы копирования и присваивания для классов, посвятив этому несколько отдельных материалов. А пока, все, что излагается ниже, можно рассматривать, как вводную часть к этим довольно сложным вопросам.

1. Конструкторы

Конструкторы - это члены классов, используемые для создания объектов-экземпляров классов. Есть несколько разновидностей конструкторов, в их числе есть довольно своеобразные. Но основное их назначение в любом случае одно и то же: обеспечение удобного способа создания объекта-экземпляра класса.

Мы рассмотрим конструктор по умолчанию, конструктор копий, аргументы по умолчанию в конструкторе и другие конструкторы.

Как уже было отмечено, конструкторы - это функции-члены, не возвращающие никаких значений (даже типа void). Другой их особенностью является то, что их имя должно в точности, включая регистр символов, совпадать с именем класса. То есть, если класс называется Any_Class, то его конструктор также должен называться Any_Class.

2. Конструктор по умолчанию.

Итак, конструктор по умолчанию (default constructor) - это конструктор, не принимающий (не имеющий) аргументов.

Таким образом, конструктор по умолчанию для некоего произвольного класса будет выглядеть так:

class ANY_CLASS

{

public:

ANY_CLASS(); //конструктор по умолчанию

... //тут все остальное

};

Обычно конструкторы объявляются в открытой (public) секции класса, поскольку деятельность конструкторов заключается в создании объекта типа класса, и они вызываются извне класса. Вызовы конструкторов, как правило, происходят неявно. Например, создание одиночного объекта типа ANY_CLASS может выглядеть следующим бразом:

ANY_CLASS ас; // ас - это объект класса ANY_CLASS

Заметьте, что в этом операторе совершенно отсутствуют скобки, конструирование - это неявная операция.

Массив объектов типа ANY_CLASS может быть создан так:

ANY_CLASS aac[10]; // aас - это массив из 10 элементов

Как видите, синтаксис объявления массива объектов точно такой же, как и синтаксис объявления статического массива данных любого базового (встроенного) типа. Одна из задач языка C++ состоит в предоставлении пользователям возможности обращаться со сложными типами данных таким же образом, как и со встроенными.

Благодаря неявной природе конструирования объектов достигается первый ее аспект: создание объекта выглядит точно так же, как и создание обычной переменной.

Кстати, создать МАССИВ объектов можно ТОЛЬКО в том случае, если для класса определен конструктор по умолчанию.

3. Конструктор копий.

Работа конструктора копий (copy constructor) заключается в предоставлении возможности инициализации (создания) нового объекта из уже существующего. Для объяснения глубинных механизмов этого процесса потребовалась бы не одна глава, поэтому мы ознакомимся с ними пока вкратце.

Общий синтаксис конструктора копий таков:

My_Class(const My_Class&); // здесь My_Class - это имя класса

В конструкторе копирования класса My_Class в качестве параметра используется ссылка на объект этого класса. Причём эта ссылка объявляется со спецификатором const. И в этом нет ничего странного.

Как известно, выражение вызова функции с параметром типа X ничем не отличается от выражения вызова функции, у которой параметром является ссылка на объект типа X. При вызове такой функции не приходится копировать объекты как параметры. Передача адреса не требует копирования объекта, а значит, при этом не будет и рекурсии.

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

--> ЧИТАТЬ ПОЛНОСТЬЮ <--

К-во Просмотров: 143
Бесплатно скачать Статья: Элементы класса, о которых всегда необходимо помнить