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


Двоичное дерево - часть 14



};

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

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

Базовый класс и набор виртуальных функций используются как общий интерфейс доступа к объектам - типам данных при проектировании базы данных. Любое множество объектов, для которых осуществляются основные алгоритмы базы данных (хранение, включение, исключение, сортировка, поиск и т.д.) будут представлены как множество указателей на объекты базового класса 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);}




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



Книжный магазин