При определении переменной можно выполнить сразу и ее инициализацию. Например:
char ch = ‘А';
Переменной ch будет выделена память и установлено начальное значение ‘А’. Определить и одновременно инициализировать переменную в программе можно только один раз.
Как и для встроенных типов данных, в языке C++ имеется возможность проинициализировать объект с типом, созданным пользователем, при его определении. Инициализация объекта может быть явная или неявная. Когда все член-данные класса находятся в части public, объект можно проинициализировать явно, указав список значений, разделенных запятыми и заключенных в круглые скобки. Например, введем определение класса Stack:
class Stack
{
public:
char * s;
int max_len;
int top;
// . . .
};
При объявлении объекта s1 типа Stack можно задать явную инициализацию:
Stack s1 = (" ", 5, 0);
По этому определению объекту отведется память для трех член-данных класса (char * s, int max_len, int top), и значение каждого член-данного установится в соответствии с указанной явной инициализацией:
char * s = " ";
int max_len = 5;
int top = 0;
Неявная инициализация объекта (закрытых или открытых переменных класса) выполняется специальной член-функцией класса. Язык C++ дает программисту возможность объявить член-функцию с определенной целью – инициализировать член-данные объекта этого класса. Поскольку такая функция конструирует или инициализирует член-данные объекта класса, она называется конструктором. Конструктор – это член-функция класса, имя которой совпадает с именем класса и не имеет возвращаемого значения. Конструктор вызывается неявно каждый раз при определении объекта класса или создании его посредством операции new.
Класс может иметь несколько конструкторов, различающихся числом или типами параметров. Функции, объявленные с одинаковыми именами, называются перегружаемыми. Использование перегрузки типично для конструкторов. Таким способом обеспечиваются различные пути инициализации объектов класса.
Различают конструкторы инициализирующий, по умолчанию и копирования. Рассмотрим их подробней.