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


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


Базовый класс и набор виртуальных функций используются как общий интерфейс доступа к объектам - типам данных при проектировании базы данных. Любое множество объектов, для которых осуществляются основные алгоритмы базы данных (хранение, включение, исключение, сортировка, поиск и т.д.) будут представлены как множество указателей на объекты базового класса ADT , за которыми могут " скрываться" объекты любых производных классов. Естественно, что все действия, выполняемые над объектами будут осуществляться через перечисленные виртуальные функции. В качестве примера рассмотрим фрагмент класса - массив указателей, который здесь выступает аналога базы данных.


&#35include "ADT.h"
// Динамический массив указателей ADT*


class MU
{
int sz;
ADT **p;
public:...
ADT *min(); // Поиск минимального


void sort(); // Сортировка


int test(); // Проверка на идентичность типов


};
// Вызов виртуальных функций отмечен " ***"


int MU::test()
{
for (i=1; p[i]!=NULL; i++)
if (p[i]-&#62Type()!=p[i-1]-&#62Type()) return 0; //***


return 1;
}


ADT *MU::min()
{ ADT *pmin; int i;
if (p[0]==NULL || !test()) return NULL;
for (i=0, pmin=p[0]; p[i]!=NULL; i++)
if (pmin-&#62Cmp(p[i]) &#62 0) pmin=p[i]; //***


return pmin;
}


void MU:sort()
{ int d,i; void *q;
if (p[0]==NULL || !test()) return;
do {
for (d=0, i=1; p[i]!=NULL; i++)
if (p[i-1]-&#62Cmp(p[i]) &#62 0) //***


{d++; q=p[i-1]; p[i-1]=p[i]; p[i]=q; }
}
while (d!=0);}

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




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