Инициализация экземпляра класса осуществляется при помощи конструкторов, которые вызываются при создании объекта и позволяют инициализировать объект.
Конструктор имеет тоже имя и что и класс, но отсутствует тип возвращаемого значения.
Конструктор по умолчанию – конструктор без параметров – инициализирует поля класса значениями по умолчанию. Если конструктор по умолчанию не определен, то компилятор формирует его автоматически.
………………………………..
Public:
СDate()
{ set(0, 0, 2000); }………………………………..
СDate Data;
Конструктор с параметрами -инициализирует поля класса значениями, заданными в параметрах. Внутри конструктора можно сделать проверку корректности параметров.
………………………………..
Public:
СDate(int d, int m, int y)
{ int day, month, yaer;
if(0<d)&&(d<32)
{day = d;}
else
{ day = 1;}
if(0<m)&&(m<13)
{ month = m;}
else
{ month = 1;}
if(2000<=y)&&(m<3001)
{ yaer = y;}
else
{ yaer = 2000;}
set(day, month, yaer);
}………………………………..СDate Data(11,5,2009);
Конструктор-копировщик –конструктор с одним параметром, тип которого определен как ссылка на тип класса. Такой конструктор позволяет инициализировать объект с использование объектов того же класса.
СDate Data_1(11,5,2009);
СDate Data_2(Data_1);
СDate Data_3= Data_1;
Если конструктор-копировщик не определен, то компилятор генерирует его автоматически (выполняется по элементное копирование полей объектов). Если ли же автоматическое создание не подходит (например в полях класса есть указатели), то необходимо определить собственный конструктор-копировщик.
………………………………..
Public:
Char *Buffer;
………………………………..
СDate(const СDate &Date)
{
Buffer = new char[100];
Strcpy(Buffer, Date. Buffer);
}
Конструктор-копировщик автоматически вызывается при:
- при передаче объекта в качестве параметра функции
- при возврате функции объекта класса.
Конструктор преобразования -конструктор с одним параметром, тип которого отличается от типа класса. Такой конструктор позволяет инициализировать объект с использование встроенных типов или объектов других классов.
Class CDate
{
………………..
Public CDate(const char *Str)
{
Buffer = new char[strlen(str) + 1];
Strcpu(Buffer, str); }………………..}
CDate Date_1(“12.05.2004”);
CDate Date_1 = “12.05.2004”;
Так же конструктор преобразования неявно вызывается для преобразования переменных других типов в объекты класса. Аналогично: функции, которые могут принимать объекты класса, так же могут принимать другие типы данных, для которых есть конструктор преобразования.
Важное преимущество данного конструктора – при перегрузке операторов пропадает необходимость в написании отдельного метода для каждой комбинации операндов.
Деструктор– деинициализирует объект класса. Вызываются при окончании работы с объектом (или при вызове Delete).