Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.DOC
Скачиваний:
13
Добавлен:
03.05.2019
Размер:
618.5 Кб
Скачать

2. Конструкторы и деструкторы Конструкторы

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

Функция-конструктор формально отличается от всех остальных функций тем, что имеет имя, совпадающее с именем класса. Например, для класса Men конструктор должен имеет вид

Men(параметры){тело конструктора}

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

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

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

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

Вернемся к нашему примеру с классом Men и включим в его состав конструктор, который, как ему и положено, будет служить для инициализации данных-членов класса задаваемыми в программе значениями (именем и возрастом индивидуума):

class Men{

char* name;

int age;

public:

Men(char* n,int a){//Конструктор

name=n; //с двумя

age=a; //параметрами

}

char* GetName(){return name;}//Встроенные

int GetAge(){return age;} // функции-члены

};

Поскольку инициализация членов класса теперь осуществляется конструктором, мы удалили из класса функции SetName() и SetAge(), которые выполняли ту же операцию.

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

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

Men m1("Freston",17);

Men* pm2=new Men("Young",23);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]