4. Конструкторы, деструкторы и доступность элементов класса
Для инициализации объектов класса в его определение можно включать специальную компонентную функцию (конструктор), формат которой:
имя_класса (список_формальных_параметров)
{операторы тела конструктора}
.h
using
namespace std;
class Datee
{
int d, m, y;
public:
Datee(int d, int m, int y)
{
this->d = d;
this->m = m;
this->y = y;
}
Datee(int dd, int mm) : d(dd),
m(mm), y(2006) {};
Datee(int);
void
display()
{
cout <<
"Date is " << d << " " << m <<
" " << y << "\n";
}
};
Datee::Datee(int dd)
{
d = dd;
m = 3;
y = 2006;
}
.cpp
#include
"c_console.h"
int _tmain(int argc, _TCHAR* argv[])
{
Datee d(1, 3, 2006);
d.display();
_getch();
return 0;
}
Для конструктора не определяется тип возвращаемого значения. В конструкторе можно изменять и значение заранее инициализированного статического компонента. Для изменения видимости компонент в определении класса можно использовать спецификаторы доступа:
private (собственный );
public (общедоступный );
protected (защищенный ),
за которым следует двоеточие. После появления спецификатора доступа в тексте определения класса означает, что до конца определения либо другого спецификатора доступа, все компоненты класса имеют указанный статус. Защищенные (protected) компоненты классов нужны для построения иерархии классов. При использовании классов без порождения на основе одних классов других (производных) применение спецификатора protected эквивалентно использованию спецификатора private.
Применение в качестве ключа класса union приводит к экономии памяти за счет многократного использования одних и тех же участков памяти для разных целей. По умолчанию, все компоненты этого класса общедоступные.
Использование в определении класса ключевого слова class, приводит к тому, что все компоненты данного класса являются собственными (private), т. е. недоступными для внешних обращений (по умолчанию). При определении (создании) объекта класса, если конструктор не вызывается программистом явным образом, компилятор вызывает его автоматически, используя умалчиваемые значения. Итак, конструктор превращает фрагмент памяти в объект того типа, который предусмотрен определением класса. В классе может быть несколько конструкторов (перегрузка), но только один с умалчиваемым значением параметров. Нельзя получить адрес конструктора. Параметром конструктора не может быть его собственный класс, но может быть ссылка на него
Компонентной функцией специального вида является деструктор.
class
stroka
{
char *ch;
public:
stroka (int
N=80)
{
ch=new
char[N+1];
ch[0]=‘\0’;
}
~ stroka (
)
{ delete [
] ch;}
};
Компонентная функция ~ stroka() является деструктором (разрушитель объектов) класса. Позволяет освобождать память из под локальных переменных автоматически. Синтаксис описания деструктора:
~имя_класса ( ) { операторы_тела_деструктора };
Деструктор не может иметь параметров и не имеет возвращаемого значения. Вызов деструктора выполняется неявно, автоматически, как только объект класса уничтожается.
Доступность
компонентов класса
Компоненты класса, объявленные в секции private, называются внутренними. Они доступны только компонентным функциям того же класса и функциям, объявленным дружественными описываемому классу. Компоненты класса, объявленные в секции protected, называются защищенными. Они доступны компонентным функциям не только данного класса, но и его потомкам. Компоненты класса, объявленные в секции public, называются общими. Они доступны за пределами класса в любом месте программы. Именно в этой секции осуществляется объявление полей и методов интерфейсной части класса.