Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Абстрактные классы

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

Определять объекты абстрактного класса нельзя, но можно определять ссылку или указатель на абстрактный класс. Нельзя использовать абстрактный класс в качестве параметра функции. Производный от абстрактного класса также считается абстрактным, если в нем не определена хотя бы одна чистая виртуальная функция.

Как всякий класс, абстрактный класс может иметь явно определенный конструктор. Из конструктора возможен вызов методов класса, но любые прямые или опосредованные обращения из конструктора к чистым виртуальным функциям приведут к ошибкам во время выполнения программы.

Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается конкретизировать. Эти общие понятия обычно невозможно использовать непосредственно, но на их основе можно, как на базе, построить частные производные классы, пригодные для описания конкретных объектов.

Таким образом, механизм абстрактных классов используется при создании сложных иерархий наследования.

В качестве иллюстрации вышесказанного рассмотрим пример для расчета площади треугольника и прямоугольника:

// Создание абстрактного класса

# include <iostream.h>

class area

{double dim1, dim2; //размеры фигуры

public:

void setarea(double dim1,double dim2)

{dim1=d1;

dim2=d2;

}

void getdim(double &dim1,double &dim2)

{d1=dim1;

d2=dim2;

}

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

};

class rectangle: public area

{ public:

double getarea()

{double d1,d2;

getdim(d1,d2);

return d1*d2;

}

};

class triangle: public area

{ public:

double getarea()

{double d1,d2;

getdim(d1,d2);

return 0.5*d1*d2;

}

};

int main()

{area *p;

rectangle r;

triangle t;

r.setarea(3.3,4.5);

t.setarea(4.0,5.0);

p=&r;

cout<< “Площадь прямоугольника:”<<p->getarea()<<’\n’;

p=&t;

cout<< “Площадь треугольника:”<<p->getarea()<<’\n’;

return 0;

}

Теперь то, что функция getarea() является чистой виртуальной, гарантирует ее обязательную подмену в каждом производном классе.

9. Варианты заданий на курсовое проектирование

Создать иерархию классов для реализации свойств и методов объектов из предметной области. В основной программе продемонстрировать работу всех методов.

Таблица 3.

Предметная область

Объекты предметной области

Основные методы классов

Графические объекты

Точка, окружность, прямая, прямоугольник, закрашенная область

Перемещение, наложение, масштабирование

Звездное небо

Вращающееся звездное небо, расширяющееся звездное небо

Добавление звезд, удаление звезд, изменение скорости движения звезд

Окна в Windows

Диалоговые окна, окна с дочерними документами, модальные диалоговые окна

Перемещение, закрытие, открытие окон, наложение окон, изменение размера

Часы

Стрелочные часы, песочные часы, электронные часы

Изменение времени, переход на летнее/зимнее время, изменение даты

Комплексные числа

Комплексные числа в обычной форме записи, показательной записи

Выполнение действий: сложение, вычитание, деление, умножение, извлечение корня

Продолжение таблицы 3.

Предметная область

Объекты предметной области

Основные методы классов

Длинные целые числа

Целые числа без знака в десятичной системе исчисления, длиной более 100 разрядов

Выполнение действий: сложение, вычитание, деление, умножение

Книги

Художественные книги, учебные и методические пособия

Добавление, удаление книг в библиотеку, поиск книг по различным параметрам

Деревья

Бинарные деревья, n-арные деревья, деревья поиска

Добавление узла в дерево, удаление узла из дерева, поиск по дереву

Языки разметки

Языки разметки документов XML, HTML, MathML

Получение количества узлов в документе, удаление и добавление узла, получение значение узла

Животные

Рыбы, птицы, млекопитающие

Перемещение, питание, рождение, смерть

Числа в различных системах исчисления

Числа в системах исчисления с основанием 2, 8, 10, 16

Выполнение действий: сложение, вычитание, деление, умножение

Архиваторы

Rar, Zip, Arj

Сжатие, извлечение, удаление данных, смена пароля

Аудиотека

Аудиотреки, музыкальные альбомы

Добавление, удаление кассет и дисков, поиск книг по различным параметрам

Видеотека

Фильмы на VHS и DVD носителях

Добавление, удаление видеокассет дисков, поиск книг по различным параметрам

Компьютерные комплектующие

Различные комплектующие для компьютера, совместимого с IBM PC AT

Добавление комплектующего, удаление комплектующего, сборка, включение/выключение компьютера

Окончание таблицы 3.

Предметная область

Объекты предметной области

Основные методы классов

Шифрование

Шифраторы с различными алгоритмами шифрования

Шифрование, дешифрование, изменение ключа шифра, изменение алгоритма кодирования

Алгоритмы

Линейный, разветвляющийся, циклический алгоритм,

блок операторов

Добавление блока операторов, изменение блока операторов, добавление оператора трассировка программы

Графические кнопки

Обычные кнопки, кнопки с надписями, кнопки с изображениями

Изменение размера кнопки, перемещение кнопки, изменение картинки и надписи, изменение положения картинки относительно надписи

Шумы и помехи

Аддитивная помеха, мультипликативная помеха

Добавление шума, наложение шумов, удаление шума

Картотека документов

Различные финансовые платежные документы: счета, расходные и приходные ордера

Поиск документа по его параметрам, формирование списка документов по различным условиям отбора, добавление документа, удаление документа из картотеки, изменение параметров документа