
-
Деструкторы
Деструктор решает задачу, обратную задаче конструктора. Деструктор (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-наследования.