Деструкторы
Деструктор решает задачу, обратную задаче конструктора. Деструктор (destruct - разрушать) - это специальная функция-член класса. Имя деструктора состоит из символа тильда (~) и имени класса.
~СWord()
{ // тело деструктора
}
Рисунок 9- Пример определения деструктора для класса CWorld
Деструктор класса вызывается при уничтожении объекта - например, когда объект выходит из области видимости. Деструктор может выполнять любые задачи, необходимые для удаления объекта. Например, если в конструкторе была динамически выделена область памяти для хранения массива строк, то деструктор должен освободить эту память непосредственно перед удалением экземпляра класса.
Деструктор не принимает никаких параметров и не возвращает никаких значений. Попытки передать аргументы деструктору, вернуть значение из деструктора - типичная ошибка для начинающего программиста. Класс может иметь только один деструктор.
На самом деле, деструкторы редко используются с простыми классами, как правило они имеют смысл в классах, в которых, например, динамически распределяется память под объекты.
Типы доступа
Член класса может иметь следующие модификаторы доступа:
public - общедоступный член класса;
protected - доступный только для членов и объектов данного класса и наследуемых классов (наследуемых с модификаторами доступа public или protected);
private - защищенный метод, доступный только внутри класса.
class
CPlayer
:
public
CIObject
{
private
:
//
приватные поля
float
ax
;
//
ускорение
float
dx
;
//
направление ускорения
long
atime
;
//
время акселерации
protected
:
//
защищённый метод
void
accelerate
(
float
d
);
public
:
//
открытые методы
CPlayer
(){};
~
CPlayer
(){};
void
draw
();
//
перегружена
void
interact
(
unsigned
long
t
);
};
Рисунок 10- Пример задания прав доступа
Рекомендации по использованию прав доступа:
private используется для полей класса, которые ни в коем случае не должны быть изменены напрямую, даже наследниками этого класса. Типичная ситуация — поле, запрещённое для записи (чтение его происходит через публичный метод-«геттер»). Также этот модификатор доступа может быть использован для методов класса, которые используются только для внутренних нужд.
protected используется для членов класса, которые должны быть доступны в классах-потомках, но которые не должны быть видны вне класса. Обычно под это определение попадает почти вся логика класса, кроме той, что отмечена, как private.
public используется для всего, что, будучи использовано, не может повредить работе класса. Обычно, всё, что помечено этим модификатором, является «интерфейсом» класса, с помощью которого происходит взаимодействие между объектом класса и остальной программой. Класс должен быть готов к тому, что в открытые члены могут попасть совершенно невероятные и противоречивые данные, и должен уметь адекватно реагировать на это. Поэтому часто публичными делают только методы класса, и переданные в них данные проверяют.
Кроме указания модификаторов доступа для членов класса, также может быть указаны модификаторы доступа при наследовании класса. Их также три и они влияют на то, как члены базового класса станут видны из класса-потомка. Изменение это происходи по простым правилам:
public наследование не изменяет доступ;
protected наследование превращает public-члены в protected;
private превращает все члены в private.
class
CPlayer:
public
CIObject
{
}
Рисунок 11- Пример public-наследования.