Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_new_ООП.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
133.63 Кб
Скачать

Деструкторы

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