14.7  Инициализация объекта класса

При определении переменной можно выполнить сразу и ее иници­ализацию. Например:

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.

Класс может иметь несколько конструкторов, различающихся числом или типами параметров. Функции, объявленные с одинако­выми именами, называются перегружаемыми. Использование перегрузки типично для конструкторов. Таким способом обеспечиваются различные пути инициализации объек­тов класса.

Различают конструкторы инициализирующий, по умолчанию и копирования. Рассмотрим их подробней.