Объектно-ориентированное программирование — Конструкторы
- Объектно-ориентированное программирование
- Локальные и глобальные переменные
- Подпрограммы и их аргументы
- Определение данных
- Операторы динамического распределения памяти
- Перегрузка функций и операций
- Правила составления перегружаемых функций и операций
- Класс как обобщение структуры
- Определение первичного класса
- Перегрузка операций
- Конструкторы
- Список инициализации
- Деструктор
- Дружественные классы
- Статические элементы класса
- Шаблоны функций
Для заполнения полей объекта при его инициализации мы вынуждены определять функцию 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 элементов в каждом.