Информатика и технология программирования


Назад: Си++ = Си + классы + объектно-ориентированное


Один из наиболее распространенных приемов использования виртуальных функции - создание базовых классов, объединяющих в единую группу различные классы на основе некоторого общего свойства. Базовый класс при этом заключает в себе общие свойства группы, а весь набор действий, которые одинаково применимы к объектам из любого класса, реализуется через виртуальные функции.

В качестве примера рассмотрим группу классов - типов данных. Допустим, проектируется база данных, предназначенная для хранения произвольных объектов (типов данных). Прежде всего, определяется ряд общих действий, которые обязательно должны быть выполнимы к объекте любого класса, чтобы он мог включаться в базу данных.


class ADT
{
public:
virtual int Get(char *)=0; // Загрузка объекта из строки


virtual char *Put()=0; // Выгрузка объекта в строку


virtual long Append(BinFile&#38)=0; // Добавить объект в двоичный файл


virtual int Load(BinFile&#38)=0; //


virtual int Type()=0; // Возвращает идентификатор


// типа объекта


virtual char *Name()=0; // Возвращает имя типа объекта


virtual int Cmp(ADT *)=0; // Сравнивает значения объектов


virtual ADT *Copy()=0; // Создает динамический объект -


// копию с себя


virtual ~ADT(){}; // Виртуальный деструктор


};

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

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




Начало  Назад  Вперед