Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Госы_ТОТТИ.docx
Скачиваний:
19
Добавлен:
24.03.2015
Размер:
6.69 Mб
Скачать

Функция деструктора

Функция деструктора записывается в объявлении класса следующим образом:

class Circle(

public:...

~Circle (); //Деструктор private:...};

Обратите внимание на символ тильды (~), который предшествует прототипу функции деструктора. При записи прототипа функции деструктора соблюдайте следующие правила:

Имя функции деструктора должно совпадать с именем класса и ему должен предшествовать символ ~. Если, например, вы объявляете класс с именем Rectangle, именем функции деструктора должно быть ~Rectangle. Следовательно, объявление класса Rectangle должно выглядеть следующим образом:

class Rectangle{

public:

Rectangle(); // Конструктор...

~Rectangle(); // Деструктор private:... };

Ключевые слова public и private

Прототипы функций и объявления элементов данных включаются в объявлении класса в разделы public (открытый) или private (закрытый). Ключевые слова public и private говорят компилятору о доступности элементов-функций и данных. Например, функция SetRadius() определена в разделе public, и это означает, что любая функция программы может вызвать функцию SetRadius(). Функция CalculateArea() определена в разделе private, и эту функцию можно вызвать только в коде функций-элементов класса Circle

Перегруженные функции.

В C++ (но не в С) вы можете использовать одно и то же имя для нескольких функций. Например, вы можете объявить две функции с именем SetRadius() в объявлении класса CCircle. Такие функции называются перегруженными функциями.

  1. Абстрактные базовые классы, конструкторы производного класса.

Абстрактным называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция.

Чистой виртуальной называется компонентная функция, которая имеет следующее определение:

virtual тип имя_функции(список_формальных_параметров)= 0;

Чистая виртуальная функция ничего не делает и недоступна для вызовов. Ее назначение – служить основой для подменяющих ее функций в производных классах. Абстрактный класс может использоваться только в качестве базового для производных классов. В абстрактном классе объявлены чистые виртуальные функции, которые по сути есть абстрактные методы.

Пример.

class Base {

public:

Base(); // конструктор по умолчанию

Base(const Base &); // конструктор копирования

virtual ~Base(); // виртуальный деструктор

virtual void Show(void) = 0; // чистая виртуальная функция

// другие чистые виртуальные функции

protected: // защищенные члены класса

private: // часто остается пустым, иначе будет мешать будущим разработкам };

class Derived : virtual public Base {

public:

Derived(); // конструктор по умолчанию

Derived(const Derived &); // конструктор копирования

Derived(параметры); // конструктор с параметрами

virtual ~Derived(); // виртуальный деструктор

void Show(void); // переопределенная виртуальная функция

// другие переопределенные виртуальные функции

Derived &operator =(const Derived &); // перегруженная операция присваивания

// другие перегруженные операции

protected: // используется вместо private, если ожидается наследование

private: // используется для деталей реализации };

По сравнению с обычными классами абстрактные классы пользуются "ограниченными правам". А именно:невозможно создать объект абстрактного класса; абстрактный класс нельзя употреблять для задания типа параметра функции или типа возвращаемого функцией значения; абстрактный класс нельзя использовать при явном приведении типов; в то же время можно определить указатели и ссылки на абстрактный класс.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]