Как видим, базовый класс получился
};
Как видим, базовый класс получился абстрактным, то есть его объект не содержит данных, а функции являются " пустыми" . Это значит, что объекты базового класса не могут создаваться в программе, а сам класс создан исключительно как " объединяющая идея" некоторого типа данных. В принципе, базовый класс может содержать данные и непустые функции, если в самой группе классов можно выделить некоторую общую часть.
Естественно, что при проектировании любого производного класса должен соблюдаться приведенный шаблон, то есть в первую очередь в нем должны быть реализованы виртуальные функции, которые поддерживают в нем перечисленные действия. Остальная часть класса может быть какой угодно, естественно, что она уже не может быть использована в общих функциях работы с базой данных.
Базовый класс и набор виртуальных функций используются как общий интерфейс доступа к объектам - типам данных при проектировании базы данных. Любое множество объектов, для которых осуществляются основные алгоритмы базы данных (хранение, включение, исключение, сортировка, поиск и т.д.) будут представлены как множество указателей на объекты базового класса
ADT , за которыми могут " скрываться" объекты любых производных классов. Естественно, что все действия, выполняемые над объектами будут осуществляться через перечисленные виртуальные функции. В качестве примера рассмотрим фрагмент класса - массив указателей, который здесь выступает аналога базы данных.
#include "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]->Type()!=p[i-1]->Type()) 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->Cmp(p[i]) > 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]->Cmp(p[i]) > 0) //***
{d++; q=p[i-1]; p[i-1]=p[i]; p[i]=q; }
}
while (d!=0);}
Содержание Назад Вперед