Объектно-ориентированное программирование — Конструкторы

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

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

Составная функция класса, вызываемая при создании объекта, называется конструктором. Поскольку объект создается при его появлении в области видимости и с помощью оператора new, то в этих случаях будет вызываться конструктор.

Основные свойства конструктора

· Класс может иметь несколько конструкторов. Имя каждого конструктора совпадает с именем класса, для которого этот конструктор определен. Конструкторы могут быть перегружены и иметь параметры по умолчанию.

· Конструктор не имеет возвращаемого значения.

· Конструктор может быть объявлен и в закрытой, и в защищенной, и в открытой части класса. Если конструктор объявлен в закрытой части, то объекты этого класса могут создаваться только дружественными функциями, а если в защищенной — дружественными функциями производного класса.

· Конструктор может быть определен вне тела класса.

Пример. Определим класс двумерного вектора. Будем инициализировать его с помощью полярных координат:

#include

#include

#include

class Vector

{

double x, y;

public:

Vector( double rho, double phi);

void show()

{

cout << "Вектор = ("<< x << ", " << y << ")\n";

}

};

Vector::Vector(double rho, double phi = 0)

{

x = rho*cos(phi);

y = rho*sin(phi);

}

void main()

{

clrscr();

Vector v(1), w(-1, 0.5);

v.show(); w.show();

getch();

}

Результаты работы программы

Вектор = (1, 0)

Вектор = (-0.877583, -0.479426)

Обращение к конструктору осуществляется одним из трех способов:

1) имя объект(параметры);

2) имя объект = имя(параметры);

3) имя объект = параметр;

где имя обозначает имя класса. Второй способ называется явным, третий — сокращенным.

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

class IntStack

{

int *v, size, top;

public:

IntStack(int size);

};

IntStack::IntStack(int size)

{

v = new int[IntStack::size = size];

top = size;

}

void main()

{

IntStack s1(1000);

IntStack s2 = IntStack(1000); // явный

IntStack s3 = 1000; // сокращенный

}

В данном примере будут определены 3 стека, по 1000 элементов в каждом.

Вы здесь: Главная Информатика Программирование Объектно-ориентированное программирование